Thư viện bộ công cụ giao diện người dùng Leanback

Bộ công cụ giao diện người dùng Leanback cung cấp một số thư viện dành riêng cho TV, dành riêng cho các ứng dụng được phát triển cho hệ điều hành Android TV. Các thư viện này bao gồm:

  • Thư viện Leanback: cung cấp các mẫu giao diện người dùng giúp đơn giản hoá việc tạo ứng dụng Android TV.
  • Thư viện Leanback Preferences (Lựa chọn ưu tiên về Leanback): cung cấp những màn hình lựa chọn ưu tiên và cài đặt nhất quán với nền tảng nhưng có thể được tuỳ chỉnh giao diện cho phù hợp với ứng dụng của bạn.
  • Thư viện Leanback Paging: hỗ trợ mô hình phân trang AndroidX cho ObjectAdapters, thường dùng với các mẫu Leanback.
  • Thư viện Leanback Tab: hỗ trợ tính năng điều hướng bằng thẻ trên Android TV.

Thư viện Leanback Paging

Paging bên trong bộ công cụ giao diện người dùng Leanback hoạt động giống như thư viện AndroidX Paging 3, giúp đơn giản hoá việc thêm tính năng phân trang vào RecyclerView.Adapter. Với thư viện Leanback Paging, bộ chuyển đổi hiển thị thường là ObjectAdapter, vì vậy, thư viện sẽ thêm tính năng hỗ trợ phân trang cho ObjectAdapter.

Để thêm bộ chuyển đổi phân trang vào ứng dụng, trước tiên hãy thêm phần phụ thuộc thư viện vào dự án:

implementation "androidx.leanback:leanback-paging:$version"

Sau đó, hãy làm theo tài liệu Paging 3 bằng cách sử dụng androidx.leanback.paging.PagingDataAdapter thay vì androidx.paging.PagingDataAdapter. Sự khác biệt duy nhất là giờ đây bạn có thể truyền Presenter hoặc PresenterSelector. Cách này hoạt động ở bất kỳ nơi nào bạn thường dùng ObjectAdapter, chẳng hạn như trong ListRow:

Kotlin

val adapter: PagingDataAdapter<MyItem> = PagingDataAdapter(myPresenter,
   object : DiffUtil.ItemCallback<MyItem>() {
       override fun areItemsTheSame(
           oldItem: MyItem,
           newItem: MyItem
       ): Boolean {
           return oldItem.id === newItem.id
       }

       override fun areContentsTheSame(
           oldItem: MyItem,
           newItem: MyItem
       ): Boolean {
           return oldItem == newItem
       }
   })

val header = HeaderItem(headerTitle)
val row = ListRow(header, adapter)

Java

PagingDataAdapter<MyItem> adapter = new PagingDataAdapter(myPresenter, new DiffUtil.ItemCallback<MyItem>() {
    @Override
    public boolean areItemsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {
        return oldItem.getId().equals(newItem.getId());
    }

    @Override
    public boolean areContentsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {
        return oldItem.equals(newItem);
    }
});

HeaderItem header = new HeaderItem(headerTitle);
Row row = new ListRow(header, adapter);

Thư viện Leanback Thẻ

Các mẫu bộ công cụ giao diện người dùng Leanback cung cấp tính năng điều hướng bên trong màn hình duyệt qua. Để thêm một hàng thẻ theo chiều ngang ở đầu ứng dụng, bạn có thể sử dụng các Thẻ Leanback.

Thêm phần phụ thuộc thư viện vào dự án của bạn:

implementation "androidx.leanback:leanback-tab:$version"

Sau đó, hãy triển khai các thẻ bằng cách sử dụng LeanbackTabLayoutLeanbackViewPager bằng cách làm theo hướng dẫn hiện có về ViewPager. Xin lưu ý rằng LeanbackViewPager dựa trên ViewPager, không phải dựa trên ViewPager2.

Sau đây là một ví dụ:

Kotlin

val leanbackTabLayout = findViewById<LeanbackTabLayout>(R.id.tab_layout)
val leanbackViewPager = findViewById<LeanbackViewPager>(R.id.view_pager)

leanbackViewPager.setAdapter(adapter)
leanbackTabLayout.setupWithViewPager(leanbackViewPager)

Java

LeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout);
LeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager);

leanbackViewPager.setAdapter(adapter);
leanbackTabLayout.setupWithViewPager(leanbackViewPager);

Các điểm hạn chế

Thư viện Thẻ Leanback có các hạn chế về chủ đề mà thư viện này hỗ trợ cũng như cách xử lý di chuyển tiêu điểm.

Giao diện được hỗ trợ

Chỉ hỗ trợ những giao diện bắt nguồn từ Theme.AppCompat. TabLayout chứa một quy tắc ràng buộc thực thi giao diện, ngăn việc sử dụng mọi giao diện không phải con cháu của Theme.AppCompat. Bạn cũng có thể sử dụng giao diện cầu nối cho bộ công cụ Giao diện người dùng Leanback.

Lấy tiêu điểm chuyển động từ thẻ lên trên cùng

Khi chiều cao bố cục lớn hơn chiều cao màn hình và bạn nhấn nút D-pad lên, nút điều khiển sẽ quay lại thẻ thay vì ở bên trong mảnh và di chuyển đến một mục phía trên mảnh đó (xem hình 1). Để xử lý vấn đề này, nội dung bên trong mảnh phải ghi đè tính năng tìm kiếm tâm điểm. Ví dụ: sử dụng RowsSupportFragment. Không thể sử dụng BrowseSupportFragment bên trong một thẻ vì thẻ này có phương thức tìm kiếm tâm điểm bị ghi đè, ngăn tiêu điểm di chuyển trở lại thẻ đó.

Hình 1. Nút D-pad lên di chuyển tiêu điểm tới thẻ thay vì mục trước đó.