Android TV androidx.leanback:leanback 开箱体验

 

public class HomeFragment extends BrowseSupportFragment {
    private static final int GRID_ITEM_WIDTH = 200;
    private static final int GRID_ITEM_HEIGHT = 200;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

//        setHeadersState(HEADERS_DISABLED);

        String[] headerItem = new String[] {"P1", "P2", "P3", "P5", "P6", "P7", "P8", "P9"};
        int coverItemCount = 20;
        ArrayObjectAdapter rowsAdapter = new ArrayObjectAdapter(new ListRowPresenter());
        for (String item : headerItem) {
            HeaderItem gridHeader = new HeaderItem( item);
            GridItemPresenter mGridPresenter = new GridItemPresenter();
            ArrayObjectAdapter gridRowAdapter = new ArrayObjectAdapter(mGridPresenter);

            int idx = 0;
            while (idx < coverItemCount) {
                String title = item + "-" + idx;
                gridRowAdapter.add(title);
                idx = idx + 1;
            }

            rowsAdapter.add(new ListRow(gridHeader, gridRowAdapter));
        }

        setAdapter(rowsAdapter);
    }

    private class GridItemPresenter extends Presenter {
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent) {
            TextView view = new TextView(parent.getContext());
            view.setLayoutParams(new ViewGroup.LayoutParams(GRID_ITEM_WIDTH, GRID_ITEM_HEIGHT));
            view.setFocusable(true);
            view.setFocusableInTouchMode(true);
            view.setBackgroundColor(
                    ContextCompat.getColor(getActivity(), android.R.color.holo_red_light));
            view.setTextColor(Color.WHITE);
            view.setGravity(Gravity.CENTER);
            return new ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(ViewHolder viewHolder, Object item) {
            ((TextView) viewHolder.view).setText((String) item);
        }

        @Override
        public void onUnbindViewHolder(ViewHolder viewHolder) {
        }
    }
}

 最近开箱看了看 Android TV 的开发,发现和手机开发区别不大,主要页面构成变成类似 ViewPage(由 BrowseSupportFragment.setAdapter 管理,以每行为单位显示,GridItemPresenter 可以理解为每行的 Adapter)

### 使用 android.support.v17.leanback 的依赖配置及安装方法 在 Android 项目中,`android.support.v17.leanback` 是用于支持 Leanback 用户界面的库,主要用于电视应用开发。以下是关于该库的依赖配置及安装方法的详细说明。 #### 1. 添加依赖到 `build.gradle` 为了使用 `android.support.v17.leanback`,需要在项目的模块级 `build.gradle` 文件中添加以下依赖项: ```gradle dependencies { implementation 'com.android.support:leanback-v17:28.0.0' } ``` 此版本号 `28.0.0` 是 `android.support` 库的最后一个稳定版本[^1]。如果使用更高版本的 Android Gradle 插件或迁移到 AndroidX,则需要进行相应的调整。 #### 2. 确保兼容性 在添加依赖时,需要注意与项目中其他 `android.support` 库的版本保持一致。例如,如果项目中已经使用了 `com.android.support:support-v4:28.0.0`,那么 `leanback-v17` 的版本也应为 `28.0.0`,以避免版本冲突问题[^1]。 #### 3. 迁移到 AndroidX 如果项目已经迁移到 AndroidX,则需要替换 `android.support.v17.leanback` 为对应的 AndroidX 包名。根据迁移指南[^2],新的包名为 `androidx.leanback`,因此需要在 `build.gradle` 中添加以下依赖: ```gradle dependencies { implementation 'androidx.leanback:leanback:1.0.0' } ``` #### 4. 配置 Android.mk(适用于原生编译) 如果项目使用的是原生编译方式(如通过 `Android.mk` 文件),则需要在 `Android.mk` 文件中声明对 `android-support-v17-leanback` 的依赖。示例如下: ```makefile LOCAL_STATIC_ANDROID_LIBRARIES := \ android-support-v17-leanback \ android-support-v4 \ android-support-v7-appcompat ``` 同时,确保 `LOCAL_SDK_VERSION` 和 `LOCAL_MIN_SDK_VERSION` 设置为适当的值,以支持 Leanback 功能[^4]。 #### 5. 解决冲突问题 如果在添加依赖后遇到类似以下警告: ``` Warning:Conflict with dependency 'com.android.support:support-annotations'. Resolved versions for app (23.1.1) and test app (23.0.1) differ. ``` 可以尝试以下方法解决: - 确保所有 `android.support` 相关依赖的版本一致。 - 在 `build.gradle` 中强制指定某个版本的 `support-annotations`,例如: ```gradle configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:28.0.0' } ``` #### 6. 注意事项 - 如果项目中使用了 AIDE 工具,并且其安装包名称带有 `Androidx`,则默认情况下已切换到 AndroidX 支持库[^3]。此时需要使用 `androidx.leanback` 而非 `android.support.v17.leanback`。 - 在迁移到 AndroidX 后,原有的 `android.support.v4` 和 `android.support.v7` 包名会被替换为 `androidx.*` 形式的包名[^2]。 ```python # 示例代码:迁移到 AndroidX 后的导入语句 from androidx.leanback.widget import VerticalGridWidget ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值