지원 중단된 Leanback UI 툴킷은 Android TV OS용으로 개발된 앱 전용의 TV 관련 라이브러리를 제공합니다. 이러한 라이브러리에는 다음이 포함됩니다.
- Leanback 라이브러리: Android TV 앱 생성을 간소화하는 UI 템플릿을 제공합니다.
- Leanback 환경설정 라이브러리: 플랫폼과 일관되지만 앱에 맞게 테마를 지정할 수 있는 환경설정 및 설정 화면을 제공합니다.
- Leanback 페이징 라이브러리: Leanback 템플릿과 함께 일반적으로 사용되는
ObjectAdapters
의 AndroidX 페이징 모델을 지원합니다. - Leanback Tabs 라이브러리: Android TV에서 탭 탐색을 지원합니다.
Leanback 페이징 라이브러리
Leanback UI 툴킷 내부의 페이징은 AndroidX Paging 3 라이브러리와 동일하게 작동하므로 RecyclerView.Adapter
에 페이징을 쉽게 추가할 수 있습니다.
Leanback Paging 라이브러리를 사용하면 노출되는 어댑터는 일반적으로 ObjectAdapter
이므로 라이브러리는 ObjectAdapter
에 페이징 지원을 추가합니다.
앱에 페이징 어댑터를 추가하려면 먼저 프로젝트에 라이브러리 종속 항목을 추가하세요.
implementation "androidx.leanback:leanback-paging:$version"
그런 다음 androidx.paging.PagingDataAdapter
대신 androidx.leanback.paging.PagingDataAdapter
를 사용하여 페이징 3 문서를 따릅니다. 유일한 차이점은 이제 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)
자바
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"
그런 다음 기존 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)
자바
LeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout); LeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager); leanbackViewPager.setAdapter(adapter); leanbackTabLayout.setupWithViewPager(leanbackViewPager);
제한사항
Leanback 탭 라이브러리는 지원하는 테마와 포커스 이동 처리 방식에 제한이 있습니다.
지원되는 테마
Theme.AppCompat
에서 파생된 테마만 지원됩니다. TabLayout
에는 Theme.AppCompat
의 비하위 테마가 사용되지 않도록 하는 테마 시행 제약 조건이 포함되어 있습니다. Leanback UI 툴킷에 브리지 테마를 사용할 수도 있습니다.
탭에서 상단으로 포커스 이동
레이아웃 높이가 화면 높이보다 큰 경우 D패드 위쪽 버튼을 누르면 컨트롤이 프래그먼트 내에 유지되지 않고 탭으로 다시 이동하여 위에 있는 항목으로 이동합니다 (그림 1 참고). 이 문제를 처리하려면 프래그먼트 내부의 콘텐츠가 포커스 검색을 재정의해야 합니다. 예를 들어 RowsSupportFragment
를 사용합니다.
BrowseSupportFragment
은 탭 내부에서 사용할 수 없습니다. 포커스가 탭으로 다시 이동하는 것을 방지하는 재정의된 포커스 검색 메서드가 있기 때문입니다.