جعبه ابزار Leanback UI تعدادی کتابخانه خاص تلویزیون را به صورت انحصاری برای برنامه های توسعه یافته برای سیستم عامل Android TV ارائه می دهد. این کتابخانه ها شامل موارد زیر است:
کتابخانه Leanback : الگوهای رابط کاربری را ارائه می دهد که ایجاد برنامه های Android TV را ساده می کند.
کتابخانه Leanback Preferences : صفحههای تنظیمات برگزیده و تنظیماتی را ارائه میدهد که با پلتفرم سازگار است، اما میتواند با برنامه شما مطابقت داشته باشد.
کتابخانه Leanback Paging : از مدل صفحهبندی AndroidX برای ObjectAdapters که معمولاً با الگوهای Leanback استفاده میشوند، پشتیبانی میکند.
کتابخانه Leanback Tabs : از ناوبری برگهها در Android TV پشتیبانی میکند.
کتابخانه صفحهبندی Leanback
صفحهبندی در جعبه ابزار Leanback UI مانند کتابخانه AndroidX Paging 3 عمل میکند، که افزودن صفحهبندی به RecyclerView.Adapter را ساده میکند. با کتابخانه Leanback Paging، آداپتوری که در معرض نمایش قرار میگیرد معمولاً یک ObjectAdapter است، بنابراین کتابخانه پشتیبانی صفحهبندی را به ObjectAdapter اضافه میکند.
برای افزودن یک آداپتور صفحهبندی به برنامه خود، ابتدا وابستگی کتابخانه را به پروژه خود اضافه کنید:
سپس مستندات Paging 3 را با استفاده از androidx.leanback.paging.PagingDataAdapter به جای androidx.paging.PagingDataAdapter دنبال کنید. تنها تفاوت این است که شما اکنون می توانید در یک Presenter یا PresenterSelector عبور کنید. این کار در هر جایی که شما معمولاً از یک ObjectAdapter استفاده می کنید، مانند ListRow کار می کند:
الگوهای جعبه ابزار UI Leanback، پیمایش جانبی را در صفحه مرور ارائه می دهند. برای افزودن ردیفی از برگه ها به صورت افقی در بالای برنامه، می توانید به جای آن از برگه های Leanback استفاده کنید.
سپس با پیروی از راهنمای ViewPager موجود، برگه ها را با استفاده از LeanbackTabLayout و LeanbackViewPager پیاده سازی کنید. توجه داشته باشید که LeanbackViewPager مبتنی بر ViewPager است نه ViewPager2 .
کتابخانه Leanback Tabs دارای محدودیتهایی در زمینههایی است که پشتیبانی میکند و نحوه مدیریت حرکت فوکوس.
تم های پشتیبانی شده
فقط تم هایی که از Theme.AppCompat مشتق شده اند پشتیبانی می شوند. TabLayout حاوی یک محدودیت برای اجرای طرح زمینه است که از استفاده از هر گونه تم غیر اصیل Theme.AppCompat جلوگیری می کند. همچنین می توانید از طرح زمینه پل برای جعبه ابزار Leanback UI استفاده کنید.
تمرکز حرکت از زبانه به بالا
هنگامی که ارتفاع طرحبندی بیشتر از ارتفاع صفحه است و دکمه D-pad up را فشار میدهید، کنترل به جای ماندن در داخل قطعه و پیمایش به یک مورد بالای آن، به برگه بازمیگردد (شکل 1 را ببینید). برای رسیدگی به این مشکل، محتویات داخل قطعه باید جستجوی فوکوس را لغو کنند. برای مثال، از RowsSupportFragment استفاده کنید. BrowseSupportFragment نمی توان در داخل یک برگه استفاده کرد زیرا دارای روش جستجوی فوکوس نادیده گرفته شده است که از بازگشت فوکوس به برگه جلوگیری می کند.
شکل 1. دکمه D-pad up فوکوس را به جای آیتم قبلی به زبانه منتقل می کند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Leanback UI toolkit libraries\n\nBuild better with Compose \nCreate beautiful UIs with minimal code using Jetpack Compose for Android TV OS. \n[Compose for TV →](/training/tv/playback/compose) \n\nThe Leanback UI toolkit provides some TV-specific libraries exclusive to\napps developed for Android TV OS. These libraries include the following:\n\n- [Leanback](/training/tv/playback) library: provides UI templates that simplify creating Android TV apps.\n- [Leanback Preferences](/reference/androidx/leanback/preference/package-summary) library: provides preferences and settings screens that are consistent with the platform but can be themed to match your app.\n- [Leanback Paging](#leanback-paging-library) library: supports the AndroidX paging model for `ObjectAdapters`, which are commonly used with the Leanback templates.\n- [Leanback Tabs](#leanback-tabs-library) library: supports tabbed navigation on Android TV.\n\nLeanback paging library\n-----------------------\n\nPaging inside the Leanback UI toolkit works the same as the AndroidX\n[Paging 3](/topic/libraries/architecture/paging/v3-overview) library, which\nsimplifies adding paging to a\n[`RecyclerView.Adapter`](/reference/kotlin/androidx/recyclerview/widget/RecyclerView.Adapter).\nWith the Leanback Paging library, the adapter that is exposed is typically an\n[`ObjectAdapter`](/reference/kotlin/androidx/leanback/widget/ObjectAdapter)\ninstead, so the library adds paging support to `ObjectAdapter`.\n\nTo add a paging adapter to your app, first add the library dependency to your project: \n\n implementation \"androidx.leanback:leanback-paging:$version\"\n\nThen follow the\n[Paging 3 documentation](/topic/libraries/architecture/paging/v3-overview) using\n`androidx.leanback.paging.PagingDataAdapter` instead of\n`androidx.paging.PagingDataAdapter`. The only difference is that you're now able\nto pass in a [`Presenter`](/reference/kotlin/androidx/leanback/widget/Presenter)\nor\n[`PresenterSelector`](/reference/kotlin/androidx/leanback/widget/PresenterSelector).\nThis works anywhere you would ordinarily use an `ObjectAdapter`, such as in a\n[`ListRow`](/reference/kotlin/androidx/leanback/widget/ListRow): \n\n### Kotlin\n\n```kotlin\nval adapter: PagingDataAdapter\u003cMyItem\u003e = PagingDataAdapter(myPresenter,\n object : DiffUtil.ItemCallback\u003cMyItem\u003e() {\n override fun areItemsTheSame(\n oldItem: MyItem,\n newItem: MyItem\n ): Boolean {\n return oldItem.id === newItem.id\n }\n\n override fun areContentsTheSame(\n oldItem: MyItem,\n newItem: MyItem\n ): Boolean {\n return oldItem == newItem\n }\n })\n\nval header = HeaderItem(headerTitle)\nval row = ListRow(header, adapter)\n```\n\n### Java\n\n```java\nPagingDataAdapter\u003cMyItem\u003e adapter = new PagingDataAdapter(myPresenter, new DiffUtil.ItemCallback\u003cMyItem\u003e() {\n @Override\n public boolean areItemsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {\n return oldItem.getId().equals(newItem.getId());\n }\n\n @Override\n public boolean areContentsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) {\n return oldItem.equals(newItem);\n }\n});\n\nHeaderItem header = new HeaderItem(headerTitle);\nRow row = new ListRow(header, adapter);\n```\n\nLeanback Tabs library\n---------------------\n\nThe Leanback UI toolkit templates provide side navigation in the\n[browse screen](/training/tv/playback/browse). To add a row of tabs horizontally\nacross the top of the app, you can instead use Leanback Tabs instead.\n\nAdd the library dependency to your project: \n\n implementation \"androidx.leanback:leanback-tab:$version\"\n\nThen implement tabs using `LeanbackTabLayout` and `LeanbackViewPager` by\nfollowing the existing\n[ViewPager guide](/guide/navigation/navigation-swipe-view). Note that\n`LeanbackViewPager` is based on `ViewPager`, not `ViewPager2`.\n\nThe following is an example: \n\n### Kotlin\n\n```kotlin\nval leanbackTabLayout = findViewById\u003cLeanbackTabLayout\u003e(R.id.tab_layout)\nval leanbackViewPager = findViewById\u003cLeanbackViewPager\u003e(R.id.view_pager)\n\nleanbackViewPager.setAdapter(adapter)\nleanbackTabLayout.setupWithViewPager(leanbackViewPager)\n```\n\n### Java\n\n```java\nLeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout);\nLeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager);\n\nleanbackViewPager.setAdapter(adapter);\nleanbackTabLayout.setupWithViewPager(leanbackViewPager);\n```\n\n### Limitations\n\nThe Leanback Tabs library has limitations in the themes it supports and how focus\nmovement is handled.\n\n#### Supported themes\n\nOnly themes that are derived from `Theme.AppCompat` are supported. `TabLayout`\ncontains a theme enforcement constraint, which prevents any nondescendant theme\nof `Theme.AppCompat` from being used. You can also use the bridge theme for the\nLeanback UI toolkit.\n\n#### Focus movement from tabs to top\n\nWhen the layout height is greater than the screen height and you press the D-pad\nup button, control moves back to the tab instead of staying inside the fragment\nand navigating to an item above it (see figure 1). To handle this issue, contents\ninside the fragment must override focus search; for example, use\n[`RowsSupportFragment`](/reference/androidx/leanback/app/RowsSupportFragment).\n[`BrowseSupportFragment`](/reference/androidx/leanback/app/BrowseSupportFragment)\ncannot be used inside a tab as it has an overridden focus search method which\nprevents the focus from moving back to the tab.\n**Figure 1.** D-pad up button moves focus to tab instead of preceding item."]]