ערכת הכלים Leanback UI, שהוצאה משימוש, מספקת כמה ספריות ספציפיות לטלוויזיה שזמינות רק לאפליקציות שפותחו עבור Android TV OS. הספריות האלה כוללות את:
- ספריית Leanback: מספקת תבניות של ממשק משתמש שמפשטות את יצירת האפליקציות ל-Android TV.
- Leanback Preferences library: מספקת העדפות ומסכי הגדרות שתואמים לפלטפורמה, אבל אפשר להחיל עליהם עיצוב שיתאים לאפליקציה.
- ספריית Leanback Paging: תומכת במודל של AndroidX להחלפת דפים ב-
ObjectAdapters, שמשמשים בדרך כלל עם תבניות Leanback. - ספריית Leanback Tabs: תומכת בניווט באמצעות כרטיסיות ב-Android TV.
ספריית החלפה בין דפים ב-Leanback
החלוקה לדפים בערכת הכלים של Leanback UI פועלת כמו בספריית 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 Tabs.
מוסיפים את התלות של הפרויקט בספרייה:
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
contains a theme enforcement constraint, which prevents any nondescendant theme
of Theme.AppCompat from being used. אפשר גם להשתמש בעיצוב של Bridge עבור ערכת הכלים של ממשק המשתמש Leanback.
העברת המיקוד מהכרטיסיות לחלק העליון
אם הגובה של הפריסה גדול מהגובה של המסך, ואתם לוחצים על הלחצן העליון של ה-D-pad, אמצעי הבקרה חוזר לכרטיסייה במקום להישאר בתוך הפריט ולנווט לפריט שמעליו (ראו איור 1). כדי לפתור את הבעיה הזו, התוכן בתוך הפראגמנט צריך לבטל את החיפוש של המיקוד. לדוגמה, אפשר להשתמש ב-RowsSupportFragment.
אי אפשר להשתמש ב-BrowseSupportFragment בתוך כרטיסייה כי יש לו שיטת חיפוש ממוקדת שהוחלפה, שמונעת מהמיקוד לחזור לכרטיסייה.