ערכת הכלים Leanback UI, שהוצאה משימוש, מספקת כמה ספריות ספציפיות לטלוויזיה שזמינות רק לאפליקציות שפותחו עבור Android TV OS. הספריות האלה כוללות את:
- ספריית Leanback: מספקת תבניות של ממשק משתמש שמפשטות את יצירת האפליקציות ל-Android TV.
- Leanback Preferences library: מספקת מסכי הגדרות והעדפות שמתאימים לפלטפורמה, אבל אפשר לשנות את העיצוב שלהם כך שיתאים לאפליקציה.
- ספריית Leanback Paging: תומכת במודל החלוקה לדפים של AndroidX עבור
ObjectAdapters
, שמשמשים בדרך כלל עם תבניות Leanback. - ספריית Leanback Tabs: תומכת בניווט באמצעות כרטיסיות ב-Android TV.
ספריית החלפה בין דפים ב-Leanback
החלוקה לדפים בערכת הכלים לבניית ממשק המשתמש של Leanback פועלת כמו בספריית Paging 3 של AndroidX, שמפשטת את הוספת החלוקה לדפים ל-RecyclerView.Adapter
.
בספריית Leanback Paging, האובייקט של המתאם שנחשף הוא בדרך כלל ObjectAdapter
, ולכן הספרייה מוסיפה תמיכה בהחלפה בין דפים ל-ObjectAdapter
.
כדי להוסיף לאפליקציה מתאם להחלפת דפים, קודם מוסיפים את התלות בספרייה לפרויקט:
implementation "androidx.leanback:leanback-paging:$version"
לאחר מכן, פועלים לפי המסמכים בנושא Paging 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
תבניות ערכת הכלים של 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
. אפשר גם להשתמש בעיצוב של Bridge עבור ערכת הכלים של ממשק המשתמש של Leanback.
העברת המיקוד מהכרטיסיות לחלק העליון
אם גובה הפריסה גדול מגובה המסך ומקישים על הלחצן 'למעלה' בלחצן הכיוון, אמצעי הבקרה חוזר לכרטיסייה במקום להישאר בתוך הפריט ולעבור לפריט שמעליו (ראו איור 1). כדי לפתור את הבעיה הזו, התוכן בתוך הפראגמנט צריך לבטל את החיפוש של המיקוד. לדוגמה, אפשר להשתמש ב-RowsSupportFragment
.
אי אפשר להשתמש ב-BrowseSupportFragment
בתוך כרטיסייה כי יש לו שיטת חיפוש מיקוד שהוחלפה, ולכן אי אפשר להעביר את המיקוד בחזרה לכרטיסייה.