Kompozycja Card
działa jako kontener Material Design dla interfejsu.
Karty zwykle zawierają jedną spójną treść. Oto kilka przykładów, gdzie możesz użyć karty:
- produkt w aplikacji zakupowej;
- artykuł w aplikacji z wiadomościami;
- wiadomość w aplikacji do komunikacji;
To skupienie się na przedstawieniu pojedynczego elementu treści odróżnia Card
od innych kontenerów. Na przykład Scaffold
zapewnia ogólną strukturę całego ekranu. Karta jest zwykle mniejszym elementem interfejsu w większym układzie, a komponent układu, taki jak Column
lub Row
, zapewnia prostszy i bardziej ogólny interfejs API.
Implementacja podstawowa
Card
działa podobnie jak inne kontenery w Compose. Deklarujesz jego zawartość, wywołując w nim inne funkcje kompozycyjne. Na przykład w tym krótkim przykładzie element Card
zawiera wywołanie elementu Text
:
@Composable
fun CardMinimalExample() {
Card() {
Text(text = "Hello, world!")
}
}
Zaawansowane implementacje
Definicję interfejsu API Card
znajdziesz w dokumentacji. Definiuje kilka parametrów, które pozwalają dostosować wygląd i działanie komponentu.
Oto kilka kluczowych parametrów, na które warto zwrócić uwagę:
elevation
: dodaje do komponentu cień, który sprawia, że wydaje się on uniesiony nad tłem.colors
: używa typuCardColors
do ustawienia domyślnego koloru kontenera i wszystkich elementów podrzędnych.enabled
: jeśli przekażesz wartośćfalse
dla tego parametru, karta będzie wyświetlana jako wyłączona i nie będzie reagować na działania użytkownika.onClick
: zwykleCard
nie akceptuje zdarzeń kliknięcia. Dlatego głównym przeciążeniem, na które warto zwrócić uwagę, jest to, które definiuje parametronClick
. Użyj tego przeciążenia, jeśli chcesz, aby implementacjaCard
reagowała na naciśnięcia użytkownika.
Poniższy przykład pokazuje, jak możesz używać tych parametrów, a także innych popularnych parametrów, takich jak shape
i modifier
.
Wypełniona karta
Poniżej znajdziesz przykład implementacji wypełnionej karty.
Kluczem jest tutaj użycie właściwości colors
do zmiany koloru wypełnienia.
@Composable fun FilledCardExample() { Card( colors = CardDefaults.cardColors( containerColor = MaterialTheme.colorScheme.surfaceVariant, ), modifier = Modifier .size(width = 240.dp, height = 100.dp) ) { Text( text = "Filled", modifier = Modifier .padding(16.dp), textAlign = TextAlign.Center, ) } }
Ta implementacja wygląda tak:

Karta podniesiona
Poniższy fragment kodu pokazuje, jak wdrożyć kartę z efektem podniesienia. Użyj dedykowanego komponentu ElevatedCard
.
Za pomocą właściwości elevation
możesz kontrolować wygląd podniesienia i powstałego cienia.
@Composable fun ElevatedCardExample() { ElevatedCard( elevation = CardDefaults.cardElevation( defaultElevation = 6.dp ), modifier = Modifier .size(width = 240.dp, height = 100.dp) ) { Text( text = "Elevated", modifier = Modifier .padding(16.dp), textAlign = TextAlign.Center, ) } }
Ta implementacja wygląda tak:

Karta z konturem
Poniżej znajdziesz przykład karty z obrysem. Użyj dedykowanego komponentu
OutlinedCard
.
@Composable fun OutlinedCardExample() { OutlinedCard( colors = CardDefaults.cardColors( containerColor = MaterialTheme.colorScheme.surface, ), border = BorderStroke(1.dp, Color.Black), modifier = Modifier .size(width = 240.dp, height = 100.dp) ) { Text( text = "Outlined", modifier = Modifier .padding(16.dp), textAlign = TextAlign.Center, ) } }
Ta implementacja wygląda tak:

Ograniczenia
Karty nie mają wbudowanych funkcji przewijania ani zamykania, ale można je zintegrować z komponentami, które oferują te funkcje. Aby na przykład wdrożyć gest przesuwania w celu zamknięcia karty, zintegruj ją z funkcją kompozycyjną SwipeToDismiss
. Aby zintegrować przewijanie, użyj modyfikatorów przewijania, takich jak verticalScroll
. Więcej informacji znajdziesz w dokumentacji dotyczącej przewijania.