Karuzela

Karuzela to przewijalna lista 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 można się skupić, oraz zawiera mały element z przeglądem tego, co znajduje się 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.