# TvRecyclerView **Repository Path**: Android-TV/TvRecyclerView ## Basic Information - **Project Name**: TvRecyclerView - **Description**: A custom RecyclerView for Android TV end - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2020-06-23 - **Last Updated**: 2024-02-23 ## Categories & Tags **Categories**: tv-devel **Tags**: None ## README # TvRecyclerView 用在android TV端的自定义recyclerView控件, 不支持手机端. ## ScreenShot





## 使用步骤 1.首先在你项目的gradle配置以下命令, 引用TvRecyclerView : ```groovy dependencies { ...... compile 'com.henryblue.library:tvrecyclerview:1.2.3' } ``` 将上面的引用命令添加到build.gradle(是module下面的, 不是项目下面的) 2. 添加TvRecyclerView到你的布局中 ``` ``` 3.设置LayoutManager 和 Adapter ``` mTvRecyclerView = (TvRecyclerView) findViewById(R.id.tv_recycler_view); GridLayoutManager manager = new GridLayoutManager(NormalFocusActivity.this, 3); manager.setOrientation(LinearLayoutManager.HORIZONTAL); mTvRecyclerView.setLayoutManager(manager); int itemSpace = getResources(). getDimensionPixelSize(R.dimen.recyclerView_item_space); mTvRecyclerView.addItemDecoration(new SpaceItemDecoration(itemSpace)); NormalAdapter mAdapter = new NormalAdapter(this); mTvRecyclerView.setAdapter(mAdapter); mTvRecyclerView.setOnItemStateListener(new TvRecyclerView.OnItemStateListener() { @Override public void onItemViewClick(View view, int position) { Log.i(TAG, "you click item position: " + position); } @Override public void onItemViewFocusChanged(boolean gainFocus, View view, int position) { } }); mTvRecyclerView.setSelectPadding(35, 34, 35, 38); ``` ## TvRecyclerView的自定义属性 ```xml ``` | Name | Type | Default | Description | |:----:|:----:|:-------:|:-----------:| |scrollMode|enum|normalScroll| 设置滑动模式 | |isAutoProcessFocus|boolean|true| 设置是否由TvRecyclerView处理焦点 | |focusScale|Float|1.04f| 设置item获取焦点时放大倍数. 如果设置属性'isAutoProcessFocus', 这个属性不生效, 总是默认值1.0f | |focusDrawable|reference|null| 设置焦点框背景图, 如果设置属性'isAutoProcessFocus', 这个属性不生效 | ## TvRecyclerView提供的公共接口 | Name | Description | |:----:|:---------------:| |setSelectedScale(float)| 设置item获取焦点时放大倍数 | |setIsAutoProcessFocus(boolean)| 设置属性'isAutoProcessFocus' | |setFocusDrawable(Drawable)| 置焦点框背景图 | |setItemSelected(int)| 设置指定的item获取焦点 | |setSelectPadding(int,int,int,int)| 调整焦点框的padding值, 确保焦点框包裹住item | 此外: 因为TvRecyclerView继承RecyclerView, 所以你可以使用所有的RecyclerView的所有公共接口. ## 其他 当isAutoProcessFocus属性设置为true(默认为true), 意味着焦点是由TvRecyclerView来处理, 不会交给子view, 这时需要注意子view不要将背景设为 透明, 因为如果背景为透明, 那么根据焦点框的实现逻辑, 会发生重影的效果。