3. 使用 BrowseFragment 构建电视主浏览页
BrowseFragment 的页面骨架与职责划分
Leanback 的 BrowseFragment 不是普通 Fragment,它内部已经预置了电视主浏览页的三段式结构:左侧品牌区(Branding)、顶部搜索入口(SearchAffordance)、右侧内容行(RowsFragment)。开发者要做的是通过 setHeadersState、setBrandTitle、setOnSearchClickedListener 和 setAdapter 把这三块“填满”,而不是自己从零拼布局。
关键配置代码
在 onCreate 或 onActivityCreated 中完成以下四步配置,即可得到一个可交互的电视主浏览页骨架:
public class MainBrowseFragment extends BrowseFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// 1. 品牌区:显示应用名,隐藏默认图标
setBrandTitle("电视应用实战");
setBrandColor(Color.parseColor("#1A73E8"));
setBadgeDrawable(null);
// 2. 搜索入口:点击后跳转搜索页
setOnSearchClickedListener(v -> {
Intent intent = new Intent(getActivity(), SearchActivity.class);
startActivity(intent);
});
// 3. 头部显示模式:左侧显示分类标题
setHeadersState(HEADERS_ENABLED);
setHeadersTransitionOnBackEnabled(true);
// 4. 内容行适配器(本例先用空适配器验证骨架)
ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
setAdapter(rowsAdapter);
}
}
验证要点:运行后按遥控器方向键,观察焦点是否按“品牌区→搜索→行标题→卡片”的顺序移动;按返回键时,若当前在内容行内,应回到行标题层级而非直接退出应用。
遥控器交互验证清单
| 按键 | 预期行为 | 观察点 |
|---|---|---|
| D-pad 下 | 焦点从搜索入口进入第一行标题 | 行标题高亮,卡片行整体上移 |
| D-pad 右 | 焦点在卡片间向右移动 | 卡片边框高亮,行不滚动 |
| D-pad 上 | 焦点从行标题回到搜索入口 | 搜索图标获得焦点态 |
| 确认键 | 触发搜索入口点击 | 跳转到 SearchActivity |
| 返回键 | 从内容行回到行标题层级 | 不直接退出应用 |
常见问题:若搜索入口不显示,检查是否调用了
setOnSearchClickedListener;若品牌区文字不显示,确认 setBrandTitle 在 setAdapter 之前调用。Leanback 的 BrowseFragment 要求主题为 Theme.Leanback.Browse,否则布局会异常。