Leanback UI টুলকিট লাইব্রেরি

রচনার সাথে আরও ভাল তৈরি করুন৷
Android TV OS এর জন্য Jetpack Compose ব্যবহার করে ন্যূনতম কোড সহ সুন্দর UI তৈরি করুন।

Leanback UI টুলকিট কিছু টিভি-নির্দিষ্ট লাইব্রেরি প্রদান করে যা শুধুমাত্র Android TV OS-এর জন্য তৈরি করা অ্যাপের জন্য। এই লাইব্রেরিগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

  • Leanback লাইব্রেরি: UI টেমপ্লেট প্রদান করে যা Android TV অ্যাপ তৈরি করা সহজ করে।
  • Leanback প্রেফারেন্স লাইব্রেরি: প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ কিন্তু আপনার অ্যাপের সাথে মিল রেখে থিমযুক্ত হতে পারে এমন পছন্দ এবং সেটিংস স্ক্রীন প্রদান করে।
  • Leanback পেজিং লাইব্রেরি: ObjectAdapters এর জন্য AndroidX পেজিং মডেল সমর্থন করে, যা সাধারণত Leanback টেমপ্লেটগুলির সাথে ব্যবহৃত হয়।
  • Leanback ট্যাব লাইব্রেরি: Android TV-তে ট্যাবড নেভিগেশন সমর্থন করে।

Leanback পেজিং লাইব্রেরি

Leanback UI টুলকিটের ভিতরে পেজিং অ্যান্ড্রয়েডএক্স পেজিং 3 লাইব্রেরির মতোই কাজ করে, যা একটি RecyclerView.Adapter এ পেজিং যোগ করা সহজ করে। Leanback পেজিং লাইব্রেরির সাথে, যে অ্যাডাপ্টারটি উন্মুক্ত করা হয় সেটি সাধারণত একটি ObjectAdapter হয়, তাই লাইব্রেরি ObjectAdapter এ পেজিং সমর্থন যোগ করে।

আপনার অ্যাপে একটি পেজিং অ্যাডাপ্টার যোগ করতে, প্রথমে আপনার প্রকল্পে লাইব্রেরি নির্ভরতা যোগ করুন:

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

তারপর androidx.paging.PagingDataAdapter এর পরিবর্তে androidx.leanback.paging.PagingDataAdapter ব্যবহার করে পেজিং 3 ডকুমেন্টেশন অনুসরণ করুন। শুধুমাত্র পার্থক্য হল যে আপনি এখন একজন Presenter বা PresenterSelector করতে পারবেন। আপনি সাধারণত একটি ObjectAdapter ব্যবহার করবেন যেখানে এটি কাজ করে, যেমন একটি ListRow :

কোটলিন

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)

জাভা

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 ট্যাব লাইব্রেরি

Leanback UI টুলকিট টেমপ্লেটগুলি ব্রাউজ স্ক্রিনে পার্শ্ব নেভিগেশন প্রদান করে। অ্যাপের শীর্ষ জুড়ে অনুভূমিকভাবে ট্যাবগুলির একটি সারি যোগ করতে, আপনি পরিবর্তে Leanback ট্যাবগুলি ব্যবহার করতে পারেন৷

আপনার প্রকল্পে লাইব্রেরি নির্ভরতা যোগ করুন:

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

তারপর বিদ্যমান ViewPager গাইড অনুসরণ করে LeanbackTabLayout এবং LeanbackViewPager ব্যবহার করে ট্যাবগুলি প্রয়োগ করুন। মনে রাখবেন LeanbackViewPager ViewPager এর উপর ভিত্তি করে, ViewPager2 নয়।

নিম্নলিখিত একটি উদাহরণ:

কোটলিন

val leanbackTabLayout = findViewById<LeanbackTabLayout>(R.id.tab_layout)
val leanbackViewPager = findViewById<LeanbackViewPager>(R.id.view_pager)

leanbackViewPager.setAdapter(adapter)
leanbackTabLayout.setupWithViewPager(leanbackViewPager)

জাভা

LeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout);
LeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager);

leanbackViewPager.setAdapter(adapter);
leanbackTabLayout.setupWithViewPager(leanbackViewPager);

সীমাবদ্ধতা

Leanback ট্যাব লাইব্রেরি এটি যে থিমগুলিকে সমর্থন করে এবং কীভাবে ফোকাস আন্দোলন পরিচালনা করা হয় তাতে সীমাবদ্ধতা রয়েছে৷

সমর্থিত থিম

শুধুমাত্র Theme.AppCompat থেকে প্রাপ্ত থিম সমর্থিত। TabLayout একটি থিম প্রয়োগের সীমাবদ্ধতা রয়েছে, যা Theme.AppCompat এর যেকোন ননডিসেন্ড্যান্ট থিম ব্যবহার করা থেকে বাধা দেয়। আপনি Leanback UI টুলকিটের জন্য ব্রিজ থিমটিও ব্যবহার করতে পারেন।

ট্যাব থেকে উপরে ফোকাস আন্দোলন

যখন লেআউটের উচ্চতা স্ক্রিনের উচ্চতার চেয়ে বেশি হয় এবং আপনি ডি-প্যাড আপ বোতাম টিপুন, তখন কন্ট্রোল টুকরোটির ভিতরে থাকার পরিবর্তে এবং এটির উপরে একটি আইটেমে নেভিগেট করার পরিবর্তে ট্যাবে ফিরে যায় (চিত্র 1 দেখুন)। এই সমস্যাটি পরিচালনা করার জন্য, খণ্ডের ভিতরের বিষয়বস্তু অবশ্যই ফোকাস অনুসন্ধানকে ওভাররাইড করবে; উদাহরণস্বরূপ, RowsSupportFragment ব্যবহার করুন। BrowseSupportFragment একটি ট্যাবের ভিতরে ব্যবহার করা যাবে না কারণ এতে একটি ওভাররাইডেড ফোকাস অনুসন্ধান পদ্ধতি রয়েছে যা ফোকাসটিকে ট্যাবে ফিরে যেতে বাধা দেয়।

চিত্র 1. ডি-প্যাড আপ বোতামটি আগের আইটেমের পরিবর্তে ট্যাবে ফোকাস নিয়ে যায়।