ชุดเครื่องมือ UI ของ Leanback ที่เลิกใช้แล้วมีไลบรารีเฉพาะสำหรับทีวีบางรายการที่ใช้ได้กับแอปที่พัฒนาขึ้นสำหรับ Android TV OS เท่านั้น ไลบรารีเหล่านี้ประกอบด้วยรายการต่อไปนี้
- ไลบรารี Leanback: มีเทมเพลต UI ที่ ช่วยให้การสร้างแอป Android TV ง่ายขึ้น
- ไลบรารี การตั้งค่า Leanback: มีหน้าจอการตั้งค่าและค่ากำหนดที่สอดคล้องกับ แพลตฟอร์ม แต่สามารถกำหนดธีมให้เข้ากับแอปได้
- ไลบรารีการแบ่งหน้า Leanback: รองรับ
โมเดลการแบ่งหน้า AndroidX สำหรับ
ObjectAdaptersซึ่งมักใช้กับ เทมเพลต Leanback - ไลบรารี แท็บ Leanback: รองรับการนำทางแบบแท็บ ใน Android TV
ไลบรารีการแบ่งหน้า Leanback
การแบ่งหน้าภายในชุดเครื่องมือ UI ของ Leanback ทำงานเหมือนกับไลบรารีการแบ่งหน้า AndroidX
เวอร์ชัน 3 ซึ่ง
ช่วยให้การเพิ่มการแบ่งหน้าลงใน
RecyclerView.Adapterง่ายขึ้น
ไลบรารีการแบ่งหน้า Leanback มักจะแสดงอะแดปเตอร์เป็น
ObjectAdapter
แทน ดังนั้นไลบรารีจึงเพิ่มการรองรับการแบ่งหน้าลงใน ObjectAdapter
หากต้องการเพิ่มอะแดปเตอร์เพจจิ้งลงในแอป ให้เพิ่มทรัพยากร Dependency ของไลบรารีลงในโปรเจ็กต์ก่อน
implementation "androidx.leanback:leanback-paging:$version"
จากนั้นทำตาม
เอกสารประกอบเพจจิ้งเวอร์ชัน 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
เทมเพลตชุดเครื่องมือ UI ของ Leanback มีการนำทางด้านข้างในหน้าจอเรียกดู หากต้องการเพิ่มแถวของแท็บในแนวนอนที่ด้านบนของแอป คุณสามารถใช้แท็บ Leanback แทนได้
เพิ่มทรัพยากร Dependency ของไลบรารีลงในโปรเจ็กต์
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 มีข้อจำกัดในธีมที่รองรับและวิธีจัดการการเคลื่อนไหวของโฟกัส
ธีมที่รองรับ
รองรับเฉพาะธีมที่ได้มาจาก Theme.AppCompat TabLayout มีข้อจำกัดในการบังคับใช้ธีม ซึ่งจะป้องกันไม่ให้ใช้ธีมที่ไม่ใช่ธีมย่อยของ Theme.AppCompat นอกจากนี้ คุณยังใช้ธีมบริดจ์สำหรับชุดเครื่องมือ UI ของ Leanback ได้ด้วย
การเคลื่อนไหวของโฟกัสจากแท็บไปด้านบน
เมื่อความสูงของเลย์เอาต์มากกว่าความสูงของหน้าจอและคุณกดปุ่ม D-pad ขึ้น การควบคุมจะย้ายกลับไปที่แท็บแทนที่จะอยู่ใน Fragment และไปยังรายการที่อยู่เหนือรายการนั้น (ดูรูปที่ 1) หากต้องการจัดการปัญหานี้ เนื้อหา
ภายใน Fragment ต้องลบล้างการค้นหาโฟกัส เช่น ใช้
RowsSupportFragment
BrowseSupportFragment
ไม่สามารถใช้ภายในแท็บได้เนื่องจากมีเมธอดการค้นหาโฟกัสที่ลบล้างแล้วซึ่ง
จะป้องกันไม่ให้โฟกัสย้ายกลับไปที่แท็บ