Library toolkit UI Leanback

Membangun aplikasi dengan lebih baik menggunakan Compose
Membuat UI yang menarik dengan kode minimal menggunakan Jetpack Compose untuk Android TV OS.

Toolkit UI Leanback menyediakan beberapa pustaka khusus TV yang eksklusif untuk yang dikembangkan untuk Android TV OS. Library ini mencakup:

  • Library Leanback: menyediakan template UI yang menyederhanakan pembuatan aplikasi Android TV.
  • Preferensi Leanback library: menyediakan layar preferensi dan setelan yang konsisten dengan platform tetapi dapat diberi tema agar sesuai dengan aplikasi Anda.
  • Library Leanback Paging: mendukung Model paging AndroidX untuk ObjectAdapters, yang biasa digunakan dengan Template Leanback.
  • Library Leanback Tabs: mendukung tab navigasi di Android TV.

Library paging Leanback

Paging di dalam toolkit UI Leanback berfungsi sama seperti AndroidX Library Paging 3, yang menyederhanakan penambahan paging ke RecyclerView.Adapter Dengan library Paging Leanback, adaptor yang diekspos biasanya ObjectAdapter sebagai gantinya, sehingga library akan menambahkan dukungan paging ke ObjectAdapter.

Untuk menambahkan adaptor paging ke aplikasi Anda, pertama-tama tambahkan dependensi library ke project Anda:

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

Kemudian, ikuti Dokumentasi Paging 3 menggunakan androidx.leanback.paging.PagingDataAdapter, bukan androidx.paging.PagingDataAdapter. Satu-satunya perbedaan adalah bahwa sekarang Anda dapat untuk meneruskan Presenter atau PresenterSelector. Ini berfungsi di mana pun Anda biasanya menggunakan ObjectAdapter, seperti di 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);

Library Leanback Tabs

Template toolkit UI Leanback menyediakan navigasi samping di layar jelajah. Untuk menambahkan baris tab secara horizontal di bagian atas aplikasi, Anda dapat menggunakan {i>Leanback Tabs<i}.

Tambahkan dependensi library ke project Anda:

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

Kemudian, terapkan tab menggunakan LeanbackTabLayout dan LeanbackViewPager dengan mengikuti Panduan ViewPager. Perlu diketahui bahwa LeanbackViewPager didasarkan pada ViewPager, bukan ViewPager2.

Berikut ini contohnya:

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);

Batasan

{i>Library<i} Leanback Tabs memiliki batasan dalam tema yang didukungnya dan bagaimana fokus gerakan ditangani.

Tema yang didukung

Hanya tema yang berasal dari Theme.AppCompat yang didukung. TabLayout berisi batasan penerapan tema, yang mencegah tema nonturunan dari Theme.AppCompat digunakan. Anda juga dapat menggunakan tema jembatan untuk Toolkit UI Leanback.

Fokuskan gerakan dari tab ke atas

Saat tinggi tata letak lebih besar dari tinggi layar dan Anda menekan D-pad atas, kontrol akan kembali ke tab, bukan tetap berada di dalam fragmen dan navigasikan ke item di atasnya (lihat gambar 1). Untuk menangani masalah ini, konten di dalam fragmen harus mengganti penelusuran fokus; misalnya, gunakan RowsSupportFragment BrowseSupportFragment tidak dapat digunakan di dalam tab karena metode tersebut memiliki metode penelusuran fokus yang diganti mencegah fokus kembali ke tab.

Gambar 1. Tombol atas D-pad memindahkan fokus ke tab, bukan item sebelumnya.