Leanback UI 도구 키트는 Android TV OS용으로 개발된 앱 전용 TV 전용 라이브러리를 제공합니다. 이러한 라이브러리에는 다음이 포함됩니다.
- Leanback 라이브러리: Android TV 앱 제작을 간소화하는 UI 템플릿을 제공합니다.
- Leanback 환경설정 라이브러리: 플랫폼과 일치하지만 앱에 맞게 테마를 지정할 수 있는 환경설정 및 설정 화면을 제공합니다.
- Leanback Paging 라이브러리: Leanback 템플릿에서 흔히 사용되는
ObjectAdapters
용 AndroidX 페이징 모델을 지원합니다. - Leanback Tabs 라이브러리: Android TV에서 탭 탐색 기능을 지원합니다.
Leanback Paging 라이브러리
Leanback UI 도구 키트 내의 페이징은 RecyclerView.Adapter
에 페이징을 추가하는 작업을 간소화하는 AndroidX Paging 3 라이브러리와 동일하게 작동합니다.
Leanback Paging 라이브러리를 사용하면 노출되는 어댑터가 일반적으로 ObjectAdapter
이므로 라이브러리는 ObjectAdapter
에 페이징 지원을 추가합니다.
앱에 페이징 어댑터를 추가하려면 먼저 프로젝트에 라이브러리 종속 항목을 추가합니다.
implementation "androidx.leanback:leanback-paging:$version"
그런 다음 androidx.paging.PagingDataAdapter
대신 androidx.leanback.paging.PagingDataAdapter
를 사용하여 Paging 3 문서를 따르세요. 유일한 차이점은 이제 Presenter
또는 PresenterSelector
을 전달할 수 있다는 것입니다.
ListRow
에서와 같이 일반적으로 ObjectAdapter
를 사용하는 모든 위치에서 작동합니다.
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 Tabs 라이브러리
Leanback UI 도구 키트 템플릿은 탐색 화면에서 측면 탐색을 제공합니다. 앱 상단에 가로로 탭 행을 추가하려면 Leanback Tabs를 대신 사용하면 됩니다.
프로젝트에 라이브러리 종속 항목을 추가합니다.
implementation "androidx.leanback:leanback-tab:$version"
그런 다음 기존 ViewPager 가이드에 따라 LeanbackTabLayout
및 LeanbackViewPager
를 사용하여 탭을 구현합니다. LeanbackViewPager
는 ViewPager2
가 아닌 ViewPager
를 기반으로 합니다.
예를 들면 다음과 같습니다.
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
의 비하위 테마가 사용되지 못하게 하는 테마 적용 제약 조건이 포함되어 있습니다. Leanback UI 도구 키트에도 브리지 테마를 사용할 수 있습니다.
탭에서 상단으로 포커스 이동
레이아웃 높이가 화면 높이보다 큰 상태에서 D패드 위로 버튼을 누르면 컨트롤이 프래그먼트 내에 머무르면서 그 위의 항목으로 이동하는 대신 다시 탭으로 이동합니다 (그림 1 참고). 이 문제를 처리하려면 프래그먼트 내의 콘텐츠가 포커스 검색을 재정의해야 합니다. 예를 들어 RowsSupportFragment
를 사용합니다.
BrowseSupportFragment
는 포커스를 탭으로 다시 이동하는 것을 방지하는 재정의된 포커스 검색 메서드가 있으므로 탭 내부에서 사용할 수 없습니다.