Leanback kullanıcı arayüzü araç seti, Android TV OS için geliştirilen uygulamalara özel TV'ye özel bazı kitaplıklar sağlar. Bu kitaplıklar şunları içerir:
- Leanback kitaplığı: Android TV uygulamaları oluşturmayı kolaylaştıran kullanıcı arayüzü şablonları sağlar.
- Leanback Preferences kitaplığı: Platformla tutarlı olan ancak uygulamanızla eşleşecek şekilde temalı olabilen tercihler ve ayar ekranları sağlar.
- Leanback Paging kitaplığı:
ObjectAdapters
için genellikle Leanback şablonlarıyla kullanılan AndroidX sayfalama modelini destekler. - Leanback Sekmeleri kitaplığı: Android TV'de sekmeli gezinmeyi destekler.
Leanback sayfalama kitaplığı
Leanback kullanıcı arayüzü araç setinin içinde gezinme, AndroidX Paging 3 kitaplığıyla aynı şekilde çalışır. Bu kitaplık, RecyclerView.Adapter
'a sayfalama eklemeyi kolaylaştırır.
Leanback Paging kitaplığıyla, açığa çıkan bağdaştırıcı genellikle ObjectAdapter
olur. Bu nedenle kitaplık, ObjectAdapter
öğesine sayfa oluşturma desteği ekler.
Uygulamanıza sayfalama bağdaştırıcısı eklemek için önce kitaplık bağımlılığını projenize ekleyin:
implementation "androidx.leanback:leanback-paging:$version"
Ardından androidx.paging.PagingDataAdapter
yerine androidx.leanback.paging.PagingDataAdapter
kullanarak 3. sayfa belgelerindeki talimatları uygulayın. Tek fark, artık bir Presenter
veya PresenterSelector
sınavından geçebilmenizdir.
Bu, ListRow
gibi normalde ObjectAdapter
kullanacağınız her yerde çalışır:
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);
Leanback Sekmeleri kitaplığı
Leanback kullanıcı arayüzü araç seti şablonları, göz atma ekranında yan gezinme sağlar. Uygulamanın üst kısmına yatay olarak bir sekme satırı eklemek için bunun yerine Leanback Sekmelerini kullanabilirsiniz.
Kitaplık bağımlılığını projenize ekleyin:
implementation "androidx.leanback:leanback-tab:$version"
Ardından, mevcut ViewPager kılavuzundaki talimatları uygulayarak LeanbackTabLayout
ve LeanbackViewPager
kullanarak sekmeleri uygulayın. LeanbackViewPager
işlevinin ViewPager2
temelini değil, ViewPager
değerini temel aldığını unutmayın.
Aşağıda bununla ilgili bir örnek verilmiştir:
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);
Sınırlamalar
Leanback Sekmeleri kitaplığının desteklediği temalar ve odak hareketinin nasıl işlendiğiyle ilgili sınırlamalar vardır.
Desteklenen temalar
Yalnızca Theme.AppCompat
üzerinden türetilen temalar desteklenir. TabLayout
, Theme.AppCompat
öğesine ait alt olmayan temaların kullanılmasını engelleyen bir tema yaptırım kısıtlaması içeriyor. Leanback kullanıcı arayüzü araç seti için
köprü temasını da kullanabilirsiniz.
Sekmelerden yukarıya doğru harekete odaklan
Düzen yüksekliği ekran yüksekliğinden fazla olduğunda ve D-pad yukarı düğmesine bastığınızda kontrol, parçanın içinde kalmak ve onun üzerindeki bir öğeye gitmek yerine sekmeye geri döner (bkz. Şekil 1). Bu sorunu işlemek için parçanın içindeki içeriklerin, odak aramasını geçersiz kılması gerekir. Örneğin, RowsSupportFragment
kullanın.
BrowseSupportFragment
, odağın sekmeye geri dönmesini engelleyen geçersiz kılınmış bir odaklı arama yöntemine sahip olduğundan sekme içinde kullanılamaz.