Trong Jetpack Compose Glimmer, VerticalStack là một bố cục có thể cuộn theo chiều dọc, tải từng phần, sắp xếp các mục theo trình tự ba chiều, chồng chéo trực quan. Mục chính được hiển thị nổi bật ở nền trước, trong khi các mục tiếp theo được đặt ở phía sau.
Hành vi cuộn và định vị
Vì các ngăn xếp giữ các mục được sắp xếp trong một bố cục nhỏ gọn, chồng chéo, nên chúng có một số hành vi khác với các loại thành phần tuần tự khác, chẳng hạn như danh sách:
- Khi người dùng cuộn theo chiều dọc, mục đang hoạt động ở nền trước sẽ chuyển ra khỏi khung hiển thị, cho phép mục ngay bên dưới trượt vào vị trí nổi bật ở nền trước.
- Các mục luôn có hiệu ứng động chụp nhanh bằng cách sử dụng ảnh động lò xo chuyên dụng vào vị trí nền trước sau khi cử chỉ của người dùng kết thúc.
- Các mục được đặt dọc theo trục z, với các mục ở xa hơn trong danh sách được đặt phía sau mục chính.
Quản lý tiêu điểm
VerticalStack sử dụng một hệ thống tiêu điểm chuyên biệt để đảm bảo rằng mục trên nền trước hiện tại luôn là mục tiêu chính cho lượt tương tác của người dùng:
- Tiêu điểm ban đầu và tiêu điểm khi quay lại: Tiêu điểm ban đầu và tiêu điểm khi quay lại sẽ chuyển đến mục trên cùng hiện tại của ngăn xếp.
- Thông báo tự động lấy nét: Khi các mục chuyển đổi, ngăn xếp sẽ yêu cầu lấy tiêu điểm cho mục trên cùng.
- Theo dõi tiêu điểm: Mỗi mục sử dụng
onFocusChangedđể thông báo choStackStatevề trạng thái tiêu điểm riêng của mục đó.
Ví dụ: Tạo một ngăn xếp dọc
Đoạn mã sau đây tạo một ngăn xếp dọc có nhiều mục:
@Composable fun VerticalStackSample() { VerticalStack(modifier = Modifier.fillMaxWidth().height(364.dp)) { item(key = 0) { Card(modifier = Modifier.fillMaxSize().itemDecoration(CardDefaults.shape)) { Text( "Item-0", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } } items(count = 10, key = { it + 1 }) { index -> Card(modifier = Modifier.fillMaxSize().itemDecoration(CardDefaults.shape)) { Text( "Item-${index + 1}", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } } } }
Các điểm chính về mã
- Đặt
textMotionchoLocalTextStylecủa văn bản thànhAnimated. Điều này giúp văn bản hiển thị mượt mà trong quá trình chuyển đổi tỷ lệ hoặc hoạt ảnh bố cục để ngăn chặn hiện tượng pixel bị lệch. - Cung cấp một kích thước cụ thể của
364.dpcho chiều cao của ngăn xếp dọc. Luôn cung cấp chiều cao cụ thể, sử dụng đối tượng sửa đổi chiều cao hoặc áp dụng đối tượng sửa đổifillMaxSizeđể xác định vùng hiển thị cho hiệu ứng chuyển đổi thẻ. - Không giống như các thành phần khác lấy trực tiếp một tham số hình dạng,
VerticalStackquản lý ranh giới trực quan của các mục bằng cách sử dụng đối tượng sửa đổiitemDecoration. Ví dụ này truyền cùng một hình dạng choitemDecorationcủa mục ban đầu như tất cả các mục con để duy trì hiệu ứng hình ảnh và thao tác cắt nhất quán. Ví dụ này sử dụngCardDefaults.shapemặc định.