Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Danh sách cho phép người dùng chọn một mục trong một tập hợp các lựa chọn trên thiết bị Wear OS.
Nhiều thiết bị Wear OS sử dụng màn hình tròn, điều này khiến bạn khó xem được các mục trong danh sách xuất hiện ở gần đầu và cuối màn hình. Vì lý do này, Compose cho Wear OS thêm một phiên bản của lớp LazyColumn có tên là TransformingLazyColumn. Phiên bản này hỗ trợ các hiệu ứng chuyển tỉ lệ và biến đổi.
Khi các mục di chuyển ra rìa, chúng sẽ nhỏ hơn và mờ dần.
Để thêm hiệu ứng thu phóng và cuộn, hãy dùng Modifier.transformedHeight để cho phép Compose tính toán sự thay đổi về chiều cao khi mục cuộn qua màn hình và transformation = SurfaceTransformation(transformationSpec) để áp dụng hiệu ứng hình ảnh, bao gồm cả việc thu nhỏ mục một cách trực quan cho phù hợp với mục trước đó.
Sử dụng TransformationSpec tuỳ chỉnh cho các thành phần không lấy transformation làm tham số, chẳng hạn như Text.
Ảnh động sau đây minh hoạ cách thay đổi kích thước và độ trong suốt của một phần tử khi phần tử đó di chuyển dọc theo màn hình:
Đoạn mã sau đây cho biết cách tạo danh sách bằng bố cục TransformingLazyColumn để tạo nội dung hiển thị đẹp mắt trên nhiều kích thước màn hình Wear OS, chẳng hạn như trong đoạn mã mẫu sau, đoạn mã này sẽ thêm khoảng đệm cần thiết vào phần tử đầu tiên và phần tử cuối cùng của danh sách được đặt trong contentPadding của TransformingLazyColumn. Để chỉ báo cuộn xuất hiện, hãy chia sẻ columnState giữa ScreenScaffold và TransformingLazyColumn:
valcolumnState=rememberTransformingLazyColumnState()valcontentPadding=rememberResponsiveColumnPadding(first=ColumnItemType.ListHeader,last=ColumnItemType.Button,)valtransformationSpec=rememberTransformationSpec()ScreenScaffold(scrollState=columnState,contentPadding=contentPadding){contentPadding->
TransformingLazyColumn(state=columnState,contentPadding=contentPadding){item{ListHeader(modifier=Modifier.fillMaxWidth().transformedHeight(this,transformationSpec),transformation=SurfaceTransformation(transformationSpec)){Text(text="Header")}}// ... other itemsitem{Button(modifier=Modifier.fillMaxWidth().transformedHeight(this,transformationSpec),transformation=SurfaceTransformation(transformationSpec),onClick={/* ... */},icon={Icon(imageVector=Icons.Default.Build,contentDescription="build",)},){Text(text="Build",maxLines=1,overflow=TextOverflow.Ellipsis,)}}}}
Nếu cần thêm hành vi hất và nhấp, bạn nên dùng ScalingLazyColumn. Nhờ hiệu ứng này, người dùng có thể di chuyển chính xác hơn qua các mục trong một danh sách, đồng thời họ có thể di chuyển nhanh hơn qua một danh sách dài.
Để thêm hiệu ứng này vào phiên bản ScalingLazyColumn của Horologist, hãy đặt tham số rotaryMode của columnState thành RotaryWithSnap, như minh hoạ trong đoạn mã sau:
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-08-30 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-08-30 UTC."],[],[],null,["Compose for Wear OS Material version 2.5 3\n\n*** ** * ** ***\n\nLists let users select an item from a set of choices on Wear OS devices.\n\n\nMany Wear OS devices use round screens, which makes it more difficult to see\nlist items that appear near the top and bottom of the screen. For this reason,\nCompose for Wear OS includes a version of the `LazyColumn` class called\n[`TransformingLazyColumn`](/reference/kotlin/androidx/wear/compose/foundation/lazy/package-summary?#TransformingLazyColumn(androidx.compose.ui.Modifier,androidx.wear.compose.foundation.lazy.TransformingLazyColumnState,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.ui.Alignment.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,androidx.wear.compose.foundation.rotary.RotaryScrollableBehavior,androidx.compose.foundation.OverscrollEffect,kotlin.Function1)), which supports scaling and morphing animations.\nWhen items move to the edges, they get smaller and fade out.\n\nIn order to add a scaling and scrolling effect, use `Modifier.transformedHeight`\nto allow Compose to calculate the height change as the item scrolls through the\nscreen and `transformation = SurfaceTransformation(transformationSpec)` to apply\nthe visual effects, including scaling down the item visually to match the\nprevious.\nUse a custom [`TransformationSpec`](/reference/kotlin/androidx/wear/compose/material3/lazy/TransformationSpec) for components which don't take\n`transformation` as a parameter, for example `Text`.\n\n\nThe following animation shows how an element's size and transparency changes as\nit moves along the screen:\n\nThe following code snippet shows how to create a list using [`TransformingLazyColumn`](/reference/kotlin/androidx/wear/compose/foundation/lazy/package-summary?#TransformingLazyColumn(androidx.compose.ui.Modifier,androidx.wear.compose.foundation.lazy.TransformingLazyColumnState,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.ui.Alignment.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,androidx.wear.compose.foundation.rotary.RotaryScrollableBehavior,androidx.compose.foundation.OverscrollEffect,kotlin.Function1)) layout to create content that [looks great on a variety of Wear OS screen sizes](/training/wearables/compose/screen-size), for example in the following sample code, it will add the necessary padding to the first and last elements of the list which are set in the `contentPadding` of the `TransformingLazyColumn`. In order for the scroll indicator to be shown, share the `columnState` between the `ScreenScaffold` and the `TransformingLazyColumn`:\n\n\u003cbr /\u003e\n\n```kotlin\nval columnState = rememberTransformingLazyColumnState()\nval contentPadding = rememberResponsiveColumnPadding(\n first = ColumnItemType.ListHeader,\n last = ColumnItemType.Button,\n)\nval transformationSpec = rememberTransformationSpec()\nScreenScaffold(\n scrollState = columnState,\n contentPadding = contentPadding\n) { contentPadding -\u003e\n TransformingLazyColumn(\n state = columnState,\n contentPadding = contentPadding\n ) {\n item {\n ListHeader(\n modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),\n transformation = SurfaceTransformation(transformationSpec)\n ) {\n Text(text = \"Header\")\n }\n }\n // ... other items\n item {\n Button(\n modifier = Modifier.fillMaxWidth().transformedHeight(this, transformationSpec),\n transformation = SurfaceTransformation(transformationSpec),\n onClick = { /* ... */ },\n icon = {\n Icon(\n imageVector = Icons.Default.Build,\n contentDescription = \"build\",\n )\n },\n ) {\n Text(\n text = \"Build\",\n maxLines = 1,\n overflow = TextOverflow.Ellipsis,\n )\n }\n }\n }\n}https://github.com/android/snippets/blob/f95ab59fad80aeaf5d6a90bab8a01a126f20f44e/wear/src/main/java/com/example/wear/snippets/m3/list/List.kt#L53-L96\n```\n\nAdd a snap-and-fling effect If you need to add a snap-and-fling behavior, we suggest to use `ScalingLazyColumn`. This effect helps users more precisely navigate through the items in a list while also helping them move more quickly through a long list.\n\nTo add this effect to the Horologist's version of the [`ScalingLazyColumn`](https://google.github.io/horologist/compose-layout/),\nset the `rotaryMode` parameter of `columnState` to\n[`RotaryWithSnap`](https://google.github.io/horologist/api/compose-layout/com.google.android.horologist.compose.rotaryinput/rotary-with-snap.html), as shown in the following code snippet: \n\n```kotlin\nval columnState = rememberResponsiveColumnState(\n // ...\n // ...\n rotaryMode = ScalingLazyColumnState.RotaryMode.Snap\n)\nScreenScaffold(scrollState = columnState) {\n ScalingLazyColumn(\n columnState = columnState\n ) {\n // ...\n // ...\n }\n}https://github.com/android/snippets/blob/f95ab59fad80aeaf5d6a90bab8a01a126f20f44e/wear/src/main/java/com/example/wear/snippets/list/List.kt#L72-L103\n```\n\nRecommended for you\n\n- Note: link text is displayed when JavaScript is off\n- [Compose for Wear OS Codelab](/codelabs/compose-for-wear-os)\n- [Lists and Grids](/develop/ui/compose/lists)\n- [Using Views in Compose](/develop/ui/compose/migrate/interoperability-apis/views-in-compose)"]]