Kompozycja Card działa jako kontener Material Design dla interfejsu.
Karty zwykle zawierają jedną spójną treść. Oto kilka przykładów, w których możesz użyć karty:
- produkt w aplikacji zakupowej,
- artykuł w aplikacji z wiadomościami;
- wiadomość w aplikacji do komunikacji;
Skupienie się na przedstawieniu pojedynczego elementu treści odróżnia Card od innych kontenerów. Na przykład Scaffold prezentuje 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, oferuje 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. Określa ona kilka parametrów, które pozwalają dostosować wygląd i działanie komponentu.
Warto zwrócić uwagę na kilka kluczowych parametrów:
elevation: dodaje do komponentu cień, który sprawia, że wydaje się on uniesiony nad tłem.colors: używa typuCardColorsdo ustawienia domyślnego koloru kontenera i wszystkich elementów podrzędnych.enabled: jeśli przekażesz wartośćfalsedla tego parametru, karta będzie wyświetlana jako wyłączona i nie będzie reagować na działania użytkownika.onClick: zwykleCardnie 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 implementacjaCardreagował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 specjalnego 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 specjalnego 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 funkcjami kompozycyjnymi, które je oferują. 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.