Skip to content

Latest commit

 

History

History
98 lines (80 loc) · 3.34 KB

README-zh.md

File metadata and controls

98 lines (80 loc) · 3.34 KB

TvRecyclerView

用在android TV端的自定义recyclerView控件, 不支持手机端.

ScreenShot





使用步骤

1.首先在你项目的gradle配置以下命令, 引用TvRecyclerView :

dependencies {
    ......
    compile 'com.henryblue.library:tvrecyclerview:1.2.3'
   }

将上面的引用命令添加到build.gradle(是module下面的, 不是项目下面的)

  1. 添加TvRecyclerView到你的布局中
<app.com.tvrecyclerview.TvRecyclerView
        android:id="@+id/tv_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="580dp"
        app:focusDrawable="@drawable/default_focus"/>

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的自定义属性

    <app.com.tvrecyclerview.TvRecyclerView
        ...
        app:scrollMode="followScroll"
        app:isAutoProcessFocus="false"
        app:focusScale="1.04f"
        app:focusDrawable="@drawable/default_focus"
        ...
        />
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不要将背景设为 透明, 因为如果背景为透明, 那么根据焦点框的实现逻辑, 会发生重影的效果。