Android TVアプリを作ろうとすると、まずぶつかるのが
「スマホ向けのUIがそのまま使えない」という現実です。
タッチ操作前提のUIは、リモコン操作では使いにくく、
フォーカスの移動や視認性の問題がすぐに表面化します。
そこで用意されているのが Leanback(リーンバック) ライブラリです。
Leanbackは、Android TV向けに最適化されたUIコンポーネント群とナビゲーションモデルを提供するフレームワークです。
なぜLeanbackが必要なのか
Android TVでは、次のような制約があります。
- 入力は基本的に方向キー+決定キー
- 画面との距離が遠い
- フォーカスの可視性が重要
- 1画面に詰め込みすぎると読めない
スマホ向けUIは、
- 小さなタップターゲット
- スクロール前提の長い画面
- 細かい操作
を前提にしているため、そのままでは成立しません。
Leanbackは、この制約を前提に設計されています。
Leanbackの設計思想
Leanbackは、次の原則で設計されています。
- フォーカスベースのナビゲーション
- 横方向スクロール中心のレイアウト
- 大きく読みやすいコンテンツカード
- 操作を迷わせない画面遷移
代表的なのが、NetflixやYouTubeのような「横に流れる棚型UI」です。
これは偶然ではなく、リモコン操作との相性を最優先した結果です。
Leanbackの主要コンポーネント
BrowseSupportFragment
メイン画面を構成するフラグメントです。
- 横スクロールのカテゴリ行
- 縦にカテゴリ、横にコンテンツという構造
- Android TVらしいトップ画面を簡単に構築できる
RowsSupportFragment / ArrayObjectAdapter
コンテンツの集合を表現するための仕組みです。
データをAdapterに流し込むだけで、TV向けレイアウトが自動的に構築されます。
Presenter
LeanbackにおけるPresenterは、ViewHolderに近い役割を持ちます。
- コンテンツ1件分の見た目を定義
- フォーカス時のアニメーション制御
- 選択時の挙動の制御
UIとデータの責務をきれいに分離できます。
フォーカス制御の重要性
Leanbackでは「どこにフォーカスがあるか」がUXの中心です。
- フォーカスが移動すると拡大表示
- 影や枠線で視覚的に強調
- 常に現在位置が分かる
これがないと、ユーザーは迷子になります。
実装時によくある落とし穴
フォーカスがどこにも当たらない
Viewのfocusable属性や descendantFocusability の設定ミスで発生します。
独自UIを作りすぎて操作不能になる
Leanbackの標準挙動を無視すると、操作性が著しく悪化します。
スマホと共通レイアウトにしようとして破綻する
TVは別のデバイスとして考えるべきです。
Leanbackは古いのか?
最近は Compose for TV や独自UIも増えていますが、
- 素早く作れる
- 動作が安定している
- 学習コストが低い
という理由から、Leanbackは今でも現役です。
まとめ
Leanbackは、単なるUIライブラリではありません。
- テレビというデバイス特性
- リモコンという入力制約
- 視認距離という前提
これらをすべて組み込んだ設計思想そのものです。
Android TVアプリを作るなら、まずLeanbackを理解することが
最も近道だと感じています。