Sebagian besar library AndroidX dapat digunakan dengan Android TV. Anda dapat menggunakan
Komponen Arsitektur seperti
ViewModel
untuk mengelola
data UI berbasis siklus proses, dan Room
agar
mudah bekerja dengan database SQLite lokal seperti yang Anda lakukan untuk perangkat seluler.
Namun, ada beberapa library khusus TV yang mendukung fungsi yang
eksklusif untuk Android TV. Library ini mencakup:
- Library Leanback menyediakan template UI yang menyederhanakan pembuatan aplikasi Android TV.
- Library Leanback Preferences menyediakan layar preferensi dan setelan yang konsisten dengan platform, tetapi dapat diberi tema agar cocok dengan aplikasi Anda.
- Library Leanback Paging mendukung
model paging AndroidX untuk
ObjectAdapters
, yang biasa digunakan dengan template Leanback. - Library Leanback Tabs mendukung navigasi tab di Android TV.
Library Paging Leanback
Paging untuk Leanback berfungsi sama dengan library
Paging 3 AndroidX, yang
menyederhanakan penambahan paging ke
RecyclerView.Adapter
.
Dengan Leanback, adaptor yang diekspos biasanya merupakan
ObjectAdapter
, sehingga library Paging Leanback menambahkan dukungan paging ke ObjectAdapter
.
Pertama, tambahkan library ke project Anda:
implementation "androidx.leanback:leanback-paging:$version"
Kemudian, Anda dapat mengikuti
dokumentasi Paging 3 menggunakan
androidx.leanback.paging.PagingDataAdapter
, bukan
androidx.paging.PagingDataAdapter
. Satu-satunya perbedaan adalah kini Anda dapat
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);
Pustaka Leanback Tabs
Template Leanback menyediakan navigasi samping dalam pengalaman penjelajahan, yang berfungsi dengan baik untuk banyak aplikasi. Jika memerlukan navigasi tab (biasanya ditampilkan secara horizontal di bagian atas aplikasi), Anda dapat menggunakan Leanback Tab.
Tambahkan library ke project Anda:
implementation "androidx.leanback:leanback-tab:$version"
Kemudian, terapkan tab menggunakan LeanbackTabLayout
dan LeanbackViewPager
dengan mengikuti panduan ViewPager yang ada. Perhatikan bahwa
LeanbackViewPager
didasarkan pada ViewPager
, bukan ViewPager2
.
Contoh sederhana terlihat seperti berikut:
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
Library Leanback Tabs memiliki batasan berikut.
Tema yang didukung
Hanya tema yang berasal dari Theme.AppCompat
yang didukung. TabLayout
berisi batasan penerapan tema, yang mencegah penggunaan tema
yang tidak turunan
dari Theme.AppCompat
. Anda juga dapat menggunakan tema
jembatan untuk Leanback.
Fokuskan gerakan dari tab ke atas
Jika tinggi tata letak lebih besar dari tinggi layar dan Anda menekan tombol
atas D-pad, kontrol akan bergerak kembali ke tab, bukan tetap berada di dalam fragmen
dan menavigasi ke item di atasnya (lihat video). Untuk menangani masalah ini, konten
di dalam fragmen harus mengganti penelusuran fokus. Misalnya, gunakan
RowsSupportFragment
untuk
menangani masalah ini;
BrowseSupportFragment
tidak dapat digunakan di dalam tab karena memiliki metode penelusuran fokus yang diganti yang
mencegah fokus berpindah kembali ke tab.