ספריות של ערכות הכלים לבניית ממשק משתמש ל-Leanback

כתיבה משופרת בעזרת תכונת הכתיבה
אפשר ליצור ממשקי משתמש יפים עם מינימום קוד באמצעות Jetpack Compose ל-Android TV OS.

ערכת הכלים 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 בתוך כרטיסייה כי יש לו שיטת חיפוש מיקוד שהוחלפה, ולכן אי אפשר להעביר את המיקוד בחזרה לכרטיסייה.

איור 1. הלחצן 'למעלה' בלחצני החיצים מעביר את המיקוד לכרטיסייה במקום לפריט הקודם.