# 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不要将背景设为
透明, 因为如果背景为透明, 那么根据焦点框的实现逻辑, 会发生重影的效果。