Trong Jetpack Compose Glimmer, GlimmerHorizontalPager là một bố cục có thể cuộn theo chiều ngang, được tạo thành phần kết hợp một cách linh hoạt và sắp xếp các trang theo trình tự.
Thành phần này tương tự như HorizontalPager tiêu chuẩn có trong Compose Foundation, nhưng được điều chỉnh cho phù hợp với kính có màn hình có các hành vi Glimmer và giá trị mặc định.
Theo mặc định, mỗi lần chỉ có một trang được hiển thị nổi bật. Để mang lại trải nghiệm mượt mà, bộ phân trang sử dụng ảnh động chụp nhanh để đảm bảo rằng một trang luôn nằm chính xác trong ranh giới khung hiển thị sau khi cử chỉ cuộn của người dùng kết thúc.
GlimmerHorizontalPager.Các tham số chính và lựa chọn bố cục
GlimmerHorizontalPager cung cấp các tham số có thể tuỳ chỉnh để kiểm soát khoảng cách, căn chỉnh bố cục và tải từng phần. Sau đây là một số tham số:
| Tham số | Mô tả |
|---|---|
|
Một đối tượng |
|
Khoảng đệm được áp dụng xung quanh ranh giới nội dung tổng thể sau khi cắt, hữu ích khi thêm khoảng đệm ở cạnh đầu hoặc cạnh cuối trước trang đầu tiên hoặc sau trang cuối cùng. |
|
Khoảng cách theo chiều ngang giữa các trang riêng lẻ trong trình phân trang. |
|
Một khe có khả năng kết hợp hiển thị chỉ báo trang đang hoạt động. Giá trị mặc định là |
|
Số lượng trang cần tạo và bố trí ngoài khung hiển thị có thể nhìn thấy dưới dạng một phương pháp tối ưu hoá việc tải trước. Tránh đặt các giá trị lớn để duy trì hiệu quả của thành phần kết hợp trì hoãn. |
Hãy xem tài liệu tham khảo đầy đủ để biết thông tin về tất cả các tham số có sẵn.
Đề xuất về chuyển động cho văn bản có hiệu ứng động
Trong quá trình chuyển đổi và ảnh động chụp nhanh trang trên kính có màn hình, quá trình kết xuất văn bản mặc định có thể xuất hiện các hiện tượng chụp ảnh điểm ảnh. Việc thiết lập TextMotion.Animated sẽ đảm bảo quá trình kết xuất diễn ra suôn sẻ trong suốt ảnh động bố cục:
Text( text = "Page: $page", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), )
Ví dụ: Chế độ phân trang ngang
Đoạn mã sau đây minh hoạ cách tạo một trình phân trang ngang cơ bản có 10 trang, đặt một Thẻ bên trong mỗi trang:
// Hoist the pager state, specifying the total page count with a lambda. val pagerState = rememberGlimmerPagerState(pageCount = { 10 }) GlimmerHorizontalPager( state = pagerState, modifier = Modifier.fillMaxSize(), ) { page -> // Use Glimmer components like Card and Text for optimized glasses styling. Card(modifier = Modifier.fillMaxWidth()) { Text( text = "Page: $page", // Recommended: use TextMotion.Animated for smooth transitions in a pager. style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } }
Các điểm chính về mã
- State: Khởi chạy một
GlimmerPagerStatebằngrememberGlimmerPagerState(pageCount = { 10 })để quản lý trạng thái của trình phân trang. - Nội dung của ô trang: Nhận chỉ mục trang
pagebên trong hàm lambdaGlimmerPagerScopeđể kết xuất từng thẻ. - Kiểu văn bản có ảnh động mượt mà: Sao chép
LocalTextStyle.currentvà bật rõ ràngTextMotion.Animated. - Chỉ báo trang tự động: Không giống như các trình phân trang Compose tiêu chuẩn yêu cầu một thành phần chỉ báo bên ngoài,
GlimmerHorizontalPagertự động nhúng chỉ báo trang kiểu dấu chấm theo mặc định.
Chỉ báo trang
Theo mặc định, GlimmerHorizontalPager hiển thị một chỉ báo trang dựa trên dấu chấm bằng cách sử dụng GlimmerHorizontalPagerDefaults.PageIndicator. Chỉ báo sẽ tự động điều chỉnh bảng phối màu:
- Dấu chấm đang hoạt động sử dụng màu nội dung được phân giải từ
surfacexung quanh gần nhất.
Bạn có thể truyền một PageIndicator tuỳ chỉnh để chỉ định màu sắc rõ ràng hoặc thay thế dấu chấm bằng bố cục tuỳ chỉnh của riêng bạn:
GlimmerHorizontalPager( state = pagerState, modifier = Modifier.fillMaxSize(), // Use a page numbers instead of the default dot-indicator pageIndicator = { Text( text = "${pagerState.currentPage + 1} / ${pagerState.pageCount}", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } )