با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
یک چرخ فلک فهرستی از موارد قابل پیمایش را نشان می دهد که به صورت پویا بر اساس اندازه پنجره سازگار می شوند. از چرخ و فلک برای نمایش مجموعه ای از محتوای مرتبط استفاده کنید. آیتم های چرخ و فلک بر تصاویر بصری تأکید دارند، اما همچنین می توانند حاوی متن کوتاهی باشند که با اندازه مورد تطبیق می یابد.
چهار طرح چرخ و فلک برای مناسب با موارد استفاده مختلف وجود دارد:
چند مرور : شامل موارد با اندازه های مختلف است. برای مرور بسیاری از موارد به طور همزمان، مانند عکسها، توصیه میشود.
Uncontained : شامل مواردی است که یک اندازه هستند و از لبه صفحه عبور می کنند. می توان آن را سفارشی کرد تا متن یا رابط کاربری دیگری در بالا یا زیر هر مورد نشان داده شود.
Hero : یک تصویر بزرگ را برای فوکوس کردن روی آن برجسته می کند و با یک مورد کوچک، نگاهی به آنچه در آینده خواهد داشت را ارائه می دهد. برای برجسته کردن محتوایی که میخواهید روی آن تأکید کنید، مانند تصاویر کوچک فیلم یا نمایش، توصیه میشود.
تمام صفحه : یک مورد بزرگ لبه به لبه را در یک زمان نشان می دهد و به صورت عمودی پیمایش می کند. برای محتوای بلندتر از عرض آن توصیه می شود.
شکل 1. انواع چرخ فلک بدون محدودیت (1) و تمام صفحه (2).
این صفحه به شما نشان میدهد که چگونه طرحبندیهای چرخ و فلک چندمرور و بدون محدودیت را پیادهسازی کنید. برای اطلاعات بیشتر در مورد انواع چیدمان، دستورالعملهای Carousel Material 3 را ببینید.
state : یک نمونه CarouselState که فهرست آیتم فعلی و موقعیت اسکرول را مدیریت می کند. این حالت را با استفاده از rememberCarouselState { itemCount } ایجاد کنید، که itemCount تعداد کل موارد در چرخ فلک است.
itemSpacing : مقدار فضای خالی بین آیتم های مجاور در چرخ فلک را مشخص می کند.
contentPadding : بالشتک را در اطراف ناحیه محتوای چرخ فلک اعمال می کند. از این برای اضافه کردن فضا قبل از اولین مورد یا بعد از آخرین مورد یا برای ارائه حاشیه برای موارد در منطقه قابل پیمایش استفاده کنید.
content : یک تابع ترکیبی که یک شاخص عدد صحیح دریافت می کند. از این لامبدا برای تعریف UI برای هر مورد در چرخ فلک بر اساس شاخص آن استفاده کنید.
این ترکیبپذیرها در نحوه تعیین اندازه آیتم متفاوت هستند:
itemWidth (برای HorizontalUncontainedCarousel ): عرض دقیق هر مورد را در یک چرخ فلک نامحدود مشخص می کند.
preferredItemWidth (برای HorizontalMultiBrowseCarousel ): عرض ایدهآل را برای آیتمهای یک چرخ فلک چند مرورگر پیشنهاد میکند و به مؤلفه اجازه میدهد در صورت اجازه فضا، چندین مورد را نمایش دهد.
مثال: چرخ فلک چند مرور
این قطعه یک چرخ فلک چند مرور را پیاده سازی می کند:
یک کلاس داده CarouselItem را تعریف می کند که داده ها را برای هر عنصر در چرخ فلک ساختار می دهد.
List از اشیاء CarouselItem ایجاد می کند و به خاطر می آورد که با منابع تصویر و توضیحات پر شده است.
از قابلیت ترکیب HorizontalMultiBrowseCarousel استفاده می کند که برای نمایش چندین مورد در یک چرخ فلک طراحی شده است.
حالت چرخ فلک با استفاده از rememberCarouselState مقداردهی اولیه می شود که تعداد کل آیتم ها به آن داده می شود.
آیتمها دارای یک preferredItemWidth هستند (در اینجا، 186.dp )، که عرض بهینه را برای هر مورد نشان میدهد. چرخ فلک از این برای تعیین اینکه چند آیتم می توانند در یک زمان روی صفحه قرار بگیرند استفاده می کند.
پارامتر itemSpacing یک شکاف کوچک بین آیتم ها اضافه می کند.
لامبدای انتهایی HorizontalMultiBrowseCarousel از طریق CarouselItems تکرار می شود. در هر تکرار، آیتم را در نمایه i بازیابی می کند و یک Image قابل ترکیب برای آن ارائه می کند.
Modifier.maskClip(MaterialTheme.shapes.extraLarge) یک ماسک شکل از پیش تعریف شده را برای هر تصویر اعمال می کند و به آن گوشه های گرد می دهد.
contentDescription یک توضیح قابلیت دسترسی برای تصویر ارائه می دهد.
نتیجه
تصویر زیر نتیجه قطعه قبلی را نشان می دهد:
شکل 2. چرخ فلک با مرور چندگانه، با بریده شدن آخرین مورد.
قابلیت ترکیب HorizontalUncontainedCarousel طرح چرخ فلک را ایجاد می کند.
پارامتر itemWidth یک عرض ثابت برای هر آیتم در چرخ فلک تعیین می کند.
نتیجه
تصویر زیر نتیجه قطعه قبلی را نشان می دهد:
شکل 3. چرخ فلک بدون محدودیت، که در آن آخرین مورد در چرخ فلک بریده نشده است.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-28 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-28 بهوقت ساعت هماهنگ جهانی."],[],[],null,["A carousel displays a scrollable list of items that adapt dynamically based on\nwindow size. Use carousels to showcase a collection of related content.\nCarousel items emphasize visuals, but can also contain brief text that adapts to\nthe item size.\n\nThere are four carousel layouts available to suit different use cases:\n\n- **Multi-browse**: Includes differently sized items. Recommended for browsing many items at once, like photos.\n- **Uncontained**: Contains items that are a single size and flow past the edge of the screen. Can be customized to show more text or other UI above or below each item.\n- **Hero**: Highlights one large image to focus on and provides a peek of what's next with a small item. Recommended for spotlighting content that you want to emphasize, like movie or show thumbnails.\n- **Full-screen**: Shows one edge-to-edge large item at a time and scrolls vertically. Recommended for content that is taller than it is wide.\n\n**Figure 1.** Uncontained (1) and full-screen (2) carousel types.\n\nThis page shows you how to implement the multi-browse and uncontained carousel\nlayouts. See the [Carousel Material 3 guidelines](https://m3.material.io/components/carousel/overview) for\nmore information about the layout types.\n\nAPI surface\n\nTo implement multi-browse and uncontained carousels, use the\n[`HorizontalMultiBrowseCarousel`](/reference/kotlin/androidx/compose/material3/carousel/package-summary#HorizontalMultiBrowseCarousel(androidx.compose.material3.carousel.CarouselState,androidx.compose.ui.unit.Dp,androidx.compose.ui.Modifier,androidx.compose.ui.unit.Dp,androidx.compose.foundation.gestures.TargetedFlingBehavior,androidx.compose.ui.unit.Dp,androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.PaddingValues,kotlin.Function2)) and [`HorizontalUncontainedCarousel`](/reference/kotlin/androidx/compose/material3/carousel/package-summary#HorizontalUncontainedCarousel(androidx.compose.material3.carousel.CarouselState,androidx.compose.ui.unit.Dp,androidx.compose.ui.Modifier,androidx.compose.ui.unit.Dp,androidx.compose.foundation.gestures.TargetedFlingBehavior,androidx.compose.foundation.layout.PaddingValues,kotlin.Function2))\ncomposables. These composables share the following key parameters:\n\n- `state`: A `CarouselState` instance that manages the current item index and scroll position. Create this state using `rememberCarouselState { itemCount }`, where `itemCount` is the total number of items in the carousel.\n- `itemSpacing`: Defines the amount of empty space between adjacent items in the carousel.\n- `contentPadding`: Applies padding around the content area of the carousel. Use this to add space before the first item or after the last item, or to provide margins for the items within the scrollable region.\n- `content`: A composable function that receives an integer index. Use this lambda to define the UI for each item in the carousel based on its index.\n\nThese composables differ in how they specify item sizing:\n\n- `itemWidth` (for `HorizontalUncontainedCarousel`): Specifies the exact width for each item in an uncontained carousel.\n- `preferredItemWidth` (for `HorizontalMultiBrowseCarousel`): Suggests the ideal width for items in a multi-browse carousel, letting the component display multiple items if space permits.\n\nExample: Multi-browse carousel\n\nThis snippet implements a multi-browse carousel:\n\n\n```kotlin\n@Composable\nfun CarouselExample_MultiBrowse() {\n data class CarouselItem(\n val id: Int,\n @DrawableRes val imageResId: Int,\n val contentDescription: String\n )\n\n val items = remember {\n listOf(\n CarouselItem(0, R.drawable.cupcake, \"cupcake\"),\n CarouselItem(1, R.drawable.donut, \"donut\"),\n CarouselItem(2, R.drawable.eclair, \"eclair\"),\n CarouselItem(3, R.drawable.froyo, \"froyo\"),\n CarouselItem(4, R.drawable.gingerbread, \"gingerbread\"),\n )\n }\n\n HorizontalMultiBrowseCarousel(\n state = rememberCarouselState { items.count() },\n modifier = Modifier\n .fillMaxWidth()\n .wrapContentHeight()\n .padding(top = 16.dp, bottom = 16.dp),\n preferredItemWidth = 186.dp,\n itemSpacing = 8.dp,\n contentPadding = PaddingValues(horizontal = 16.dp)\n ) { i -\u003e\n val item = items[i]\n Image(\n modifier = Modifier\n .height(205.dp)\n .maskClip(MaterialTheme.shapes.extraLarge),\n painter = painterResource(id = item.imageResId),\n contentDescription = item.contentDescription,\n contentScale = ContentScale.Crop\n )\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Carousel.kt#L44-L82\n```\n\n\u003cbr /\u003e\n\nKey points about the code\n\n- Defines a `CarouselItem` data class, which structures the data for each element in the carousel.\n- Creates and remembers a `List` of `CarouselItem` objects that are populated with image resources and descriptions.\n- Uses the `HorizontalMultiBrowseCarousel` composable, which is designed for displaying multiple items in a carousel.\n - The carousel's state is initialized using `rememberCarouselState`, which is given the total count of items.\n - Items have a `preferredItemWidth` (here, `186.dp`), which suggests an optimal width for each item. The carousel uses this to determine how many items can fit on the screen at once.\n - The `itemSpacing` parameter adds a small gap between items.\n - The trailing lambda of `HorizontalMultiBrowseCarousel` iterates through the `CarouselItems`. In each iteration, it retrieves the item at index `i` and renders an `Image` composable for it.\n - `Modifier.maskClip(MaterialTheme.shapes.extraLarge)` applies a predefined shape mask to each image, giving it rounded corners.\n - `contentDescription` provides an accessibility description for the image.\n\nResult\n\nThe following image shows the result from the preceding snippet:\n**Figure 2.** A multi-browse carousel, with the last item clipped.\n\nExample: Uncontained carousel\n\nThe following snippet implements an uncontained carousel:\n\n\n```kotlin\n@Composable\nfun CarouselExample() {\n data class CarouselItem(\n val id: Int,\n @DrawableRes val imageResId: Int,\n val contentDescription: String\n )\n\n val carouselItems = remember {\n listOf(\n CarouselItem(0, R.drawable.cupcake, \"cupcake\"),\n CarouselItem(1, R.drawable.donut, \"donut\"),\n CarouselItem(2, R.drawable.eclair, \"eclair\"),\n CarouselItem(3, R.drawable.froyo, \"froyo\"),\n CarouselItem(4, R.drawable.gingerbread, \"gingerbread\"),\n )\n }\n\n HorizontalUncontainedCarousel(\n state = rememberCarouselState { carouselItems.count() },\n modifier = Modifier\n .fillMaxWidth()\n .wrapContentHeight()\n .padding(top = 16.dp, bottom = 16.dp),\n itemWidth = 186.dp,\n itemSpacing = 8.dp,\n contentPadding = PaddingValues(horizontal = 16.dp)\n ) { i -\u003e\n val item = carouselItems[i]\n Image(\n modifier = Modifier\n .height(205.dp)\n .maskClip(MaterialTheme.shapes.extraLarge),\n painter = painterResource(id = item.imageResId),\n contentDescription = item.contentDescription,\n contentScale = ContentScale.Crop\n )\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/components/Carousel.kt#L88-L126\n```\n\n\u003cbr /\u003e\n\nKey points about the code\n\n- The `HorizontalUncontainedCarousel` composable creates the carousel layout.\n - The `itemWidth` parameter sets a fixed width for each item in the carousel.\n\nResult\n\nThe following image shows the result from the preceding snippet:\n**Figure 3.** An uncontained carousel, where the last item in the carousel is not clipped."]]