बंद की गई Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट, Android TV OS के लिए बनाए गए ऐप्लिकेशन के लिए, टीवी से जुड़ी कुछ खास लाइब्रेरी उपलब्ध कराती है. इन लाइब्रेरी में ये शामिल हैं:
- Leanback लाइब्रेरी: यह यूज़र इंटरफ़ेस (यूआई) के टेंप्लेट उपलब्ध कराती है. इनकी मदद से, Android TV के ऐप्लिकेशन आसानी से बनाए जा सकते हैं.
- Leanback Preferences लाइब्रेरी: यह प्राथमिकताएं और सेटिंग स्क्रीन उपलब्ध कराती है. ये स्क्रीन, प्लैटफ़ॉर्म के हिसाब से काम करती हैं. हालांकि, इन्हें आपके ऐप्लिकेशन के हिसाब से थीम दी जा सकती है.
- Leanback Paging लाइब्रेरी: यह
ObjectAdaptersके लिए, AndroidX पेजिनेशन मॉडल के साथ काम करती है. आम तौर पर, इनका इस्तेमाल Leanback टेंप्लेट के साथ किया जाता है. - Leanback Tabs लाइब्रेरी: यह Android TV पर टैब वाले नेविगेशन के साथ काम करती है.
Leanback पेजिनेशन लाइब्रेरी
Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट में पेजिनेशन, AndroidX
Paging 3 लाइब्रेरी की तरह ही काम करता है. इससे
पेजिनेशन जोड़ना आसान हो जाता है
RecyclerView.Adapter.
Leanback पेजिनेशन लाइब्रेरी के साथ, आम तौर पर दिखने वाला अडैप्टर,
ObjectAdapter
होता है. इसलिए, लाइब्रेरी ObjectAdapterमें पेजिनेशन की सुविधा जोड़ती है.
अपने ऐप्लिकेशन में पेजिनेशन अडैप्टर जोड़ने के लिए, सबसे पहले अपने प्रोजेक्ट में लाइब्रेरी की डिपेंडेंसी जोड़ें:
implementation "androidx.leanback:leanback-paging:$version"
इसके बाद,
Paging 3 के दस्तावेज़ में दिए गए निर्देशों का पालन करें.
androidx.leanback.paging.PagingDataAdapter के बजाय
androidx.paging.PagingDataAdapter का इस्तेमाल करें. फ़र्क़ सिर्फ़ इतना है कि अब
Presenter
या
PresenterSelectorको पास किया जा सकता है.
यह उन सभी जगहों पर काम करता है जहां आम तौर पर ObjectAdapter का इस्तेमाल किया जाता है. जैसे, 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);
Leanback Tabs लाइब्रेरी
Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट के टेंप्लेट, ब्राउज़ स्क्रीन में साइड नेविगेशन की सुविधा देते हैं. ऐप्लिकेशन में सबसे ऊपर, टैब की एक लाइन जोड़ने के लिए, Leanback Tabs का इस्तेमाल किया जा सकता है.
अपने प्रोजेक्ट में लाइब्रेरी की डिपेंडेंसी जोड़ें:
implementation "androidx.leanback:leanback-tab:$version"
इसके बाद, मौजूदा ViewPager गाइड का पालन करके, LeanbackTabLayout और LeanbackViewPager का इस्तेमाल करके टैब लागू करें. ध्यान दें कि
LeanbackViewPager पर आधारित है, न कि ViewPager2 पर.ViewPager
यहां एक उदाहरण दिया गया है:
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);
सीमाएं
Leanback Tabs लाइब्रेरी में, थीम और फ़ोकस के मूवमेंट को हैंडल करने के तरीके से जुड़ी सीमाएं हैं.
इस तरह के कोड काम करते हैं
सिर्फ़ Theme.AppCompat से ली गई थीम काम करती हैं. TabLayout
में, थीम लागू करने की एक पाबंदी होती है. इसकी वजह से, Theme.AppCompat से अलग कोई भी थीम इस्तेमाल नहीं की जा सकती. Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट के लिए, ब्रिज थीम का भी इस्तेमाल किया जा सकता है.
टैब से सबसे ऊपर तक फ़ोकस का मूवमेंट
जब लेआउट की ऊंचाई, स्क्रीन की ऊंचाई से ज़्यादा होती है और D-पैड का ऊपर वाला बटन दबाया जाता है, तो कंट्रोल फ़्रैगमेंट में रहने के बजाय, वापस टैब पर चला जाता है. साथ ही, यह उसके ऊपर मौजूद किसी आइटम पर नेविगेट नहीं करता (पहली इमेज देखें). इस समस्या को हल करने के लिए, फ़्रैगमेंट में मौजूद कॉन्टेंट को फ़ोकस खोजने की सुविधा को ओवरराइड करना होगा. उदाहरण के लिए, RowsSupportFragment का इस्तेमाल करें.
BrowseSupportFragment
का इस्तेमाल किसी टैब के अंदर नहीं किया जा सकता, क्योंकि इसमें फ़ोकस खोजने का एक ओवरराइड किया गया तरीका होता है. इसकी वजह से, फ़ोकस वापस टैब पर नहीं जा पाता.