Karuzela

Karuzela wyświetla przewijaną listę elementów, które dostosowują się dynamicznie do rozmiaru okna. Korzystaj z karuzel, aby prezentować kolekcje powiązanych treści. Elementy karuzeli zawierają głównie elementy wizualne, ale mogą też zawierać krótki tekst, który dostosowuje się do rozmiaru elementu.

Dostępne są 4 układy karuzeli dopasowane do różnych zastosowań:

  • Wiele przeglądarek: obejmuje produkty o różnych rozmiarach. Zalecane do przeglądania wielu elementów jednocześnie, np. zdjęć.
  • Bez ograniczeń: zawiera elementy o jednym rozmiarze, które wystają poza krawędź ekranu. Możesz go dostosować, aby wyświetlał więcej tekstu lub inny interfejs nad każdym elementem.
  • Główny: wyróżnia jedno duże zdjęcie, na którym użytkownik ma się skupić, oraz zawiera mały element, który zapowiada, co będzie dalej. Zalecane do wyróżniania treści, które chcesz podkreślić, takich jak miniatury filmów lub programów.
  • Pełny ekran: wyświetla jeden duży element na pełnym ekranie i przewija w pionie. Zalecane dla treści, które są wyższe niż szersze.
Typ karuzeli bez ramki i w wersji pełnoekranowej, wyświetlanej obok siebie. Typ karuzeli bez ograniczeń zawiera wiele elementów karuzeli, a wersja pełnoekranowa – tylko jeden element, który zajmuje cały ekran.
Rysunek 1. Typy karuzeli bez ramki (1) i pełnoekranowych (2).

Na tej stronie znajdziesz informacje o wdrażaniu układów z wielokrotnie wyświetlanymi kartami i bez ograniczeń. Więcej informacji o typach układów znajdziesz w wytycznych dotyczących karuzeli Material 3.

Interfejs API

Aby wdrożyć przeglądarki wielozadaniowe i karuzele bez ograniczeń, użyj komponentów HorizontalMultiBrowseCarousel i HorizontalUncontainedCarousel. Te komponenty mają te same kluczowe parametry:

  • state: instancja CarouselState, która zarządza bieżącym indeksem elementu i pozycją przewijania. Utwórz ten stan za pomocą parametru rememberCarouselState { itemCount }, gdzie itemCount to łączna liczba elementów w karuzeli.
  • itemSpacing: określa ilość pustego miejsca między sąsiednimi elementami w karuzeli.
  • contentPadding: stosuje wypełnienie wokół obszaru treści karuzeli. Użyj tego, aby dodać odstęp przed pierwszym elementem lub po ostatnim elemencie albo aby zapewnić marginesy dla elementów w regionie przewijania.
  • content: funkcja typu „composable”, która przyjmuje indeks całkowity. Użyj tej funkcji lambda, aby zdefiniować interfejs dla każdego elementu w karuzeli na podstawie jego indeksu.

Te komponenty różnią się sposobem określania rozmiaru elementów:

  • itemWidth (dla HorizontalUncontainedCarousel): określa dokładną szerokość każdego elementu w nieograniczonym karuzeli.
  • preferredItemWidth (dla HorizontalMultiBrowseCarousel): sugeruje idealną szerokość elementów w karuzeli z wieloma przeglądami, umożliwiając komponentowi wyświetlanie wielu elementów, jeśli pozwala na to dostępna przestrzeń.

Przykład: karuzela z wieloma przeglądami

Ten fragment kodu implementuje karuzel z wieloma przeglądami:

Najważniejsze informacje o kodzie

  • Definiuje klasę danych CarouselItem, która strukturyzuje dane każdego elementu w karuzeli.
  • Tworzy i zapamiętuje List obiektów CarouselItem, które są wypełnione zasobami obrazów i opisami.
  • Używa komponentu HorizontalMultiBrowseCarousel, który służy do wyświetlania wielu elementów w karuzeli.
    • Stan karuzeli jest inicjowany za pomocą funkcji rememberCarouselState, która zwraca łączną liczbę elementów.
    • Elementy mają atrybut preferredItemWidth (tutaj 186.dp), który sugeruje optymalną szerokość każdego z nich. Karuzelę wykorzystuje tę wartość do określenia, ile elementów może się zmieścić na ekranie jednocześnie.
    • Parametr itemSpacing dodaje niewielką przerwę między elementami.
    • Ostatnia lambda w funkcji HorizontalMultiBrowseCarousel iteruje po CarouselItems. W każdej iteracji pobiera element o indeksie i i renderuje dla niego kompozyt Image.
    • Modifier.maskClip(MaterialTheme.shapes.extraLarge) stosuje do każdego obrazu gotową maskę kształtu, nadając mu zaokrąglone rogi.
    • contentDescription zawiera opis obrazu obsługujący ułatwienia dostępu.

Wynik

Ten obraz przedstawia wynik z poprzedniego fragmentu kodu:

Karuzela z 3 obrazami, z których 2 są w całości widoczne, a 1 jest częściowo poza ekranem.
Rysunek 2. Karuzela z wieloma kartami, w której ostatni element jest przycięty.

Przykład: nieograniczone karuzele

Ten fragment kodu wdraża karuzel bez ograniczeń:

Najważniejsze informacje o kodzie

  • Komponent HorizontalUncontainedCarousel tworzy układ karuzeli.
    • Parametr itemWidth ustawia stałą szerokość każdego elementu w karuzeli.

Wynik

Ten obraz przedstawia wynik z poprzedniego fragmentu kodu:

Karuzela bez ramki z 3 elementami Ostatni element jest częściowo widoczny, ale nie jest przycięty.
Rysunek 3. Karuzela bez ograniczeń, w której ostatni element na karuzeli nie jest przycięty.