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
একটি ট্যাবের ভিতরে ব্যবহার করা যাবে না কারণ এতে একটি ওভাররাইডেড ফোকাস অনুসন্ধান পদ্ধতি রয়েছে যা ফোকাসটিকে ট্যাবে ফিরে যেতে বাধা দেয়।