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

কম্পোজ দিয়ে আরও ভালোভাবে তৈরি করুন
জেটপ্যাক কম্পোজ ব্যবহার করে অ্যান্ড্রয়েড টিভি ওএস-এর জন্য ন্যূনতম কোডে সুন্দর ইউআই তৈরি করুন।

অপ্রচলিত লিনব্যাক UI টুলকিটটি কিছু টিভি-নির্দিষ্ট লাইব্রেরি প্রদান করে, যা শুধুমাত্র অ্যান্ড্রয়েড টিভি ওএস-এর জন্য তৈরি অ্যাপগুলোর জন্য সংরক্ষিত। এই লাইব্রেরিগুলোর মধ্যে নিম্নলিখিতগুলো অন্তর্ভুক্ত:

  • লিনব্যাক লাইব্রেরি: ইউআই টেমপ্লেট সরবরাহ করে যা অ্যান্ড্রয়েড টিভি অ্যাপ তৈরি করা সহজ করে তোলে।
  • লিনব্যাক প্রেফারেন্সেস লাইব্রেরি: এটি এমন প্রেফারেন্স ও সেটিংস স্ক্রিন সরবরাহ করে যা প্ল্যাটফর্মের সাথে সামঞ্জস্যপূর্ণ, কিন্তু আপনার অ্যাপের সাথে মিলিয়ে থিম পরিবর্তন করা যায়।
  • লিনব্যাক পেজিং লাইব্রেরি: এটি ObjectAdapters জন্য অ্যান্ড্রয়েডএক্স পেজিং মডেল সমর্থন করে, যা সাধারণত লিনব্যাক টেমপ্লেটগুলির সাথে ব্যবহৃত হয়।
  • লিনব্যাক ট্যাব লাইব্রেরি: অ্যান্ড্রয়েড টিভিতে ট্যাবযুক্ত নেভিগেশন সমর্থন করে।

লিনব্যাক পেজিং লাইব্রেরি

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

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

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

এরপর androidx.leanback.paging.PagingDataAdapter এর পরিবর্তে androidx.paging.PagingDataAdapter ব্যবহার করে Paging 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 UI টুলকিট টেমপ্লেটগুলো ব্রাউজ স্ক্রিনে সাইড নেভিগেশন প্রদান করে। অ্যাপের উপরে আড়াআড়িভাবে ট্যাবের একটি সারি যোগ করতে, আপনি এর পরিবর্তে Leanback Tabs ব্যবহার করতে পারেন।

আপনার প্রজেক্টে লাইব্রেরি ডিপেন্ডেন্সি যোগ করুন:

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 Tabs লাইব্রেরির সমর্থিত থিম এবং ফোকাস মুভমেন্ট পরিচালনার পদ্ধতিতে কিছু সীমাবদ্ধতা রয়েছে।

সমর্থিত থিম

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

ট্যাব থেকে শীর্ষে ফোকাস স্থানান্তর

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

চিত্র ১। ডি-প্যাডের আপ বাটন ফোকাসকে পূর্ববর্তী আইটেমের পরিবর্তে ট্যাবে নিয়ে যায়।