Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट लाइब्रेरी

Compose की मदद से बेहतर ऐप्लिकेशन बनाना
Android TV OS के लिए Jetpack Compose का इस्तेमाल करके, कम से कम कोड में सुंदर यूज़र इंटरफ़ेस बनाएं.

बंद किए जा चुके Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट में, टीवी के लिए खास तौर पर बनाई गई कुछ लाइब्रेरी उपलब्ध हैं. ये लाइब्रेरी, Android TV OS के लिए बनाए गए ऐप्लिकेशन के लिए ही उपलब्ध हैं. इन लाइब्रेरी में ये शामिल हैं:

  • Leanback लाइब्रेरी: यह यूज़र इंटरफ़ेस (यूआई) टेंप्लेट उपलब्ध कराती है. इससे Android TV ऐप्लिकेशन बनाना आसान हो जाता है.
  • Leanback Preferences लाइब्रेरी: यह प्लैटफ़ॉर्म के हिसाब से, सेटिंग और प्राथमिकताओं वाली स्क्रीन उपलब्ध कराती है. हालांकि, इन्हें आपके ऐप्लिकेशन के हिसाब से थीम दी जा सकती है.
  • Leanback Paging लाइब्रेरी: यह ObjectAdapters के लिए AndroidX पेजिंग मॉडल के साथ काम करती है. इनका इस्तेमाल आम तौर पर Leanback टेंप्लेट के साथ किया जाता है.
  • Leanback Tabs लाइब्रेरी: यह Android TV पर टैब वाले नेविगेशन की सुविधा देती है.

Leanback Paging Library

Leanback यूज़र इंटरफ़ेस (यूआई) टूलकिट में पेजिंग की सुविधा, AndroidX Paging 3 लाइब्रेरी की तरह ही काम करती है. इससे RecyclerView.Adapter में पेजिंग की सुविधा जोड़ना आसान हो जाता है. Leanback Paging लाइब्रेरी के साथ, आम तौर पर ObjectAdapter को अडैप्टर के तौर पर इस्तेमाल किया जाता है. इसलिए, लाइब्रेरी ObjectAdapter में पेजिंग की सुविधा जोड़ती है.

अपने ऐप्लिकेशन में पेजिंग अडैप्टर जोड़ने के लिए, सबसे पहले अपने प्रोजेक्ट में लाइब्रेरी की डिपेंडेंसी जोड़ें:

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

इसके बाद, androidx.paging.PagingDataAdapter के बजाय androidx.leanback.paging.PagingDataAdapter का इस्तेमाल करके, Paging 3 के दस्तावेज़ में दिए गए निर्देशों का पालन करें. फ़र्क़ सिर्फ़ इतना है कि अब 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 UI टूलकिट के टेंप्लेट, ब्राउज़ स्क्रीन में साइड नेविगेशन की सुविधा देते हैं. ऐप्लिकेशन में सबसे ऊपर हॉरिज़ॉन्टल तौर पर टैब की एक लाइन जोड़ने के लिए, Leanback टैब का इस्तेमाल किया जा सकता है.

अपने प्रोजेक्ट में लाइब्रेरी की डिपेंडेंसी जोड़ें:

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

इसके बाद, LeanbackTabLayout और LeanbackViewPager का इस्तेमाल करके टैब लागू करें. इसके लिए, ViewPager गाइड में दिए गए निर्देशों का पालन करें. ध्यान दें कि LeanbackViewPager, ViewPager पर आधारित है, न कि ViewPager2 पर.

यहां एक उदाहरण दिया गया है:

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 यूज़र इंटरफ़ेस (यूआई) टूलकिट के लिए, ब्रिज थीम का भी इस्तेमाल किया जा सकता है.

टैब से सबसे ऊपर मौजूद विकल्पों पर फ़ोकस ले जाना

जब लेआउट की ऊंचाई, स्क्रीन की ऊंचाई से ज़्यादा होती है और डी-पैड के ऊपर वाले बटन को दबाया जाता है, तो कंट्रोल फ़्रैगमेंट में रहने के बजाय टैब पर वापस चला जाता है. साथ ही, यह उसके ऊपर मौजूद किसी आइटम पर नेविगेट नहीं करता (पहला फ़िगर देखें). इस समस्या को हल करने के लिए, फ़्रैगमेंट में मौजूद कॉन्टेंट को फ़ोकस सर्च को ओवरराइड करना होगा. उदाहरण के लिए, RowsSupportFragment का इस्तेमाल करें. BrowseSupportFragment का इस्तेमाल किसी टैब में नहीं किया जा सकता, क्योंकि इसमें फ़ोकस सर्च करने का तरीका बदला गया है. इससे फ़ोकस को वापस टैब पर ले जाने में समस्या आती है.

पहली इमेज. डी-पैड के ऊपर वाले बटन को दबाने पर, फ़ोकस पिछले आइटम के बजाय टैब पर चला जाता है.