Karuzela

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

Dostępne są 4 układy karuzeli, które pasują do różnych przypadków użycia:

  • Wielokrotne przeglądanie: obejmuje produkty o różnych rozmiarach. Zalecany do przeglądania wielu elementów naraz, np. zdjęć.
  • Nieograniczony: zawiera elementy o jednym rozmiarze, które wykraczają poza krawędź ekranu. Można go dostosować, aby wyświetlać więcej tekstu lub innych elementów interfejsu nad lub pod każdym elementem.
  • Główny: wyróżnia jeden duży obraz, na którym skupia się uwaga, i pokazuje, co będzie dalej, za pomocą małego elementu. Zalecane do wyróżniania treści, na których chcesz się skupić, np. miniatur filmów lub programów.
  • Pełny ekran: wyświetla po jednym dużym elemencie od krawędzi do krawędzi i przewija się w pionie. Zalecany w przypadku treści, które są wyższe niż szersze.
Karuzela nieograniczona i pełnoekranowa wyświetlane obok siebie. Karuzela bez kontenera zawiera wiele elementów, a karuzela pełnoekranowa – jeden element zajmujący cały ekran.
Rysunek 1. Karuzela nieograniczona (1) i pełnoekranowa (2).

Na tej stronie dowiesz się, jak wdrożyć układy karuzeli z wieloma przeglądarkami i bez kontenera. Więcej informacji o typach układu znajdziesz w wytycznych dotyczących karuzeli w Material 3.

Powierzchnia interfejsu API

Aby wdrożyć karuzele z wieloma przeglądaniami i bez kontenera, użyj komponentów HorizontalMultiBrowseCarouselHorizontalUncontainedCarousel. Te komponenty kompozycyjne mają te same kluczowe parametry:

  • state: instancja CarouselState, która zarządza bieżącym indeksem elementów i pozycją przewijania. Utwórz ten stan za pomocą kodu 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 do obszaru treści karuzeli dopełnienie. Użyj tego parametru, aby dodać odstęp przed pierwszym lub po ostatnim elementem albo ustawić marginesy elementów w obszarze przewijania.
  • content: funkcja typu „composable”, która przyjmuje indeks liczby całkowitej. Użyj tej funkcji lambda, aby zdefiniować interfejs każdego elementu w karuzeli na podstawie jego indeksu.

Te funkcje kompozycyjne różnią się sposobem określania rozmiaru elementu:

  • itemWidth (w przypadku HorizontalUncontainedCarousel): określa dokładną szerokość każdego elementu w nieograniczonym karuzeli.
  • preferredItemWidth (w przypadku HorizontalMultiBrowseCarousel): sugeruje idealną szerokość elementów w karuzeli z wieloma kartami, dzięki czemu komponent może wyświetlać wiele elementów, jeśli jest na to miejsce.

Przykład: karuzela z wieloma przeglądarkami

Ten fragment kodu implementuje karuzelę z wieloma przeglądarkami:

Najważniejsze informacje o kodzie

  • Definiuje klasę danych CarouselItem, która strukturyzuje dane dla każdego elementu w karuzeli.
  • Tworzy i zapamiętuje List obiektów CarouselItem, które są wypełniane zasobami obrazów i opisami.
  • Używa komponentu HorizontalMultiBrowseCarousel, który jest przeznaczony do wyświetlania wielu elementów w karuzeli.
    • Stan karuzeli jest inicjowany za pomocą zmiennej rememberCarouselState, której przypisywana jest łączna liczba elementów.
    • Elementy mają wartość preferredItemWidth (w tym przypadku 186.dp), która sugeruje optymalną szerokość każdego elementu. Karuzela używa tej wartości do określania, ile elementów może się zmieścić na ekranie jednocześnie.
    • Parametr itemSpacing dodaje niewielką przerwę między elementami.
    • Ostatnia lambda HorizontalMultiBrowseCarousel iteruje po CarouselItems. W każdej iteracji pobiera element o indeksie i i renderuje dla niego funkcję kompozycyjną Image.
    • Modifier.maskClip(MaterialTheme.shapes.extraLarge) stosuje do każdego obrazu predefiniowaną maskę kształtu, nadając mu zaokrąglone rogi.
    • contentDescription podaje opis obrazu obsługujący ułatwienia dostępu.

Wynik

Na ilustracji poniżej widać wynik działania powyższego fragmentu kodu:

Karuzela z 3 obrazami, z których 2 są w pełni widoczne, a 1 jest częściowo poza ekranem.
Rysunek 2. Karuzela z wieloma przeglądarkami, z ostatnim elementem przyciętym.

Przykład: nieograniczony karuzel

Poniższy fragment kodu implementuje karuzelę bez kontenera:

Najważniejsze informacje o kodzie

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

Wynik

Na ilustracji poniżej widać wynik działania powyższego fragmentu kodu:

Nieograniczona karuzela z 3 elementami. Ostatni element jest częściowo widoczny, ale nie jest przycięty.
Rysunek 3. Nieograniczona karuzela, w której ostatni element nie jest przycięty.