Frontend Development 10 min read

Exploring Android TV Leanback Library: Introduction, Integration, and Core Components

This article walks through Android TV’s Leanback library—its purpose, how to add the dependency, and core components such as BaseGridView, Presenter, and ObjectAdapter—using the QQ Music TV app as a case study, while weighing its design advantages against maturity and update‑frequency drawbacks.

Tencent Music Tech Team
Tencent Music Tech Team
Tencent Music Tech Team
Exploring Android TV Leanback Library: Introduction, Integration, and Core Components
Around the Android platform, there are countless excellent articles sharing mobile development experience, but technical articles for TV are far fewer. This article uses the QQ Music Android TV version development process as an example, deeply studies Leanback, analyzes its pros and cons, and serves as a solid technical summary that readers can benefit from. Editor: harveyxu

1. Introduction to Leanback

Leanback is a dependency library added to the Support Library series by Google in November 2014, dedicated to Android TV development. According to Google's official documentation, Android TV and Leanback were created to provide an ideal 10‑foot (three‑meter) viewing experience.

In my view, Leanback offers TV app developers two major benefits:

Leanback provides a complete development framework centered on BaseGridView and its subclasses, including

That concludes the introduction; the pros and cons are subjective. Let's move to the main content.

2. Adding the Dependency

Add the following line to your build.gradle to include the latest Leanback library:

implementation androidx.leanback:leanback:1.1.0-alpha02

However, Leanback's maintenance frequency is somewhat concerning, and you may encounter incompatibilities (e.g., Leanback requires minSDK >= 17 ). In such cases, we recommend importing Leanback via source code.

3. Development Framework & Core Components

From a macro perspective, Leanback fits well with an MVP architecture. In our practice, Leanback greatly assists View and Presenter development; often only the model needs to be implemented to complete a page, which is very convenient. This section explains Leanback's core components and usage ideas.

3.1 BaseGridView Component

The GridView series is the core UI layout component of Leanback. As shown in the figure (from CSDN), the BaseGridView class inherits from RecyclerView and overrides many focus‑handling methods, working with GridLayoutManager to provide focus memory, view‑scroll alignment, etc. Developers mainly need to focus on data population. Leanback provides two subclasses: VerticalGridView and HorizontalGridView. By combining them, rich layouts can be built. The example below shows a VerticalGridView as the root layout with multiple HorizontalGridView children. Alternatively, setColumnNum can be used to create a grid layout without nesting GridViews.

3.2 Data Population

Previously, when using RecyclerView/ListView, we only needed to implement the corresponding Adapter interface. In Leanback, the Adapter structure is optimized and decoupled from data display logic. In RecyclerView.Adapter , viewType and onCreateViewHolder are used to create different ViewHolder types, which has two potential issues:

If there are many ViewHolder types, Adapter code becomes bloated.

Reusing ViewHolder code across categories is cumbersome and requires custom encapsulation.

In Leanback, this logic is decoupled into four components:

Presenter

PresenterSelector

ObjectAdapter

ItemBridgeAdapter

Although more classes need attention, the logic is clear. Presenter and PresenterSelector together handle the ViewHolder logic originally in Adapter. Presenter implementation is simple, as shown in the UML diagram, mainly responsible for creating and binding/unbinding ViewHolder. onCreate / onBind / onUnbind methods are similar to before.

PresenterSelector takes over the viewType functionality, selecting a Presenter based on data type. It returns a Presenter that ObjectAdapter uses to create ViewHolder.

ItemBridgeAdapter and ObjectAdapter connect Presenter/PresenterSelector with RecyclerView. Leanback provides ready‑made subclasses such as ArrayObjectAdapter , ListRowAdapter , CursorObjectAdapter , and SparseArrayObjectAdapter , covering many scenarios. Custom implementations are also possible.

4. Conclusion

During a major version development, Leanback demonstrated strong assistance in building UI frameworks quickly. However, the library has notable drawbacks: it is not mature. Compared with other support libraries, its update frequency and completeness are lacking, e.g., mysterious Library Group‑only variables and methods, an older RecyclerView version with legacy issues. Therefore we resorted to source‑code integration. Once the pitfalls are understood, Leanback is pleasant to use! This article covered basic Leanback usage; future articles will explore component customization. Stay tuned!

References

Leanback library: https://developer.android.com/jetpack/androidx/releases/leanback

Leanback Demo Github: https://github.com/android/tv-samples

Leanback Codelab tutorial: https://codelabs.developers.google.com/codelabs/androidtv-adding-leanback/index.html#0

UI DevelopmentRecyclerViewMVPAndroid TVLeanback
Tencent Music Tech Team
Written by

Tencent Music Tech Team

Public account of Tencent Music's development team, focusing on technology sharing and communication.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.