常用组件
- HorizontalGridView
- HorizontalGridView
这两个控件都是leanback中的,均继承至BaseGridView,而BaseGridView则继承至RecyclerView。所以本质上是RecyclerView,只不过是根据TV的特性做了一些封装而已。
如需使用leanback库,则需要在项目中引入
implementation 'androidx.leanback:leanback:1.0.0'
其它组件
- ShadowOverlayContainer
- ColorOverlayDimmer
- ItemBridgeAdapter
- FocusHighlightHelper
FocusHighlightHelper.setupBrowseItemFocusHighlight(itemBridgeAdapter,
FocusHighlight.ZOOM_FACTOR_MEDIUM, false);
- Presenter
- PresenterSelector
- ArrayObjectAdapter
public ArrayObjectAdapter(PresenterSelector presenterSelector) {
super(presenterSelector);
}
public ArrayObjectAdapter(Presenter presenter) {
super(presenter);
}
public ArrayObjectAdapter() {
}
- HeaderItem
- ListRow
public ListRow(HeaderItem header, ObjectAdapter adapter) {
super(header);
this.mAdapter = adapter;
this.verify();
}
public ListRow(long id, HeaderItem header, ObjectAdapter adapter) {
super(id, header);
this.mAdapter = adapter;
this.verify();
}
public ListRow(ObjectAdapter adapter) {
this.mAdapter = adapter;
this.verify();
}
去掉View通过遥控器按键方式获取焦点时的默认背景
- 方式一:给view添加如下属性,去掉默认背景
android:defaultFocusHighlightEnabled="false" - 方式二:给应用主题添加如下属性,去掉所有的view默认背景
<item name="android:defaultFocusHighlightEnabled">false</item> - 方式三:不要使用Theme.AppCompat.Light.NoActionBar主题,改用Theme.AppCompat.NoActionBar主题
关于一些属性:
解决不同容器里焦点切换不成功的问题
app:focusOutEnd="true"
app:focusOutFront="true"
标题栏使用 HorizontalGridView 实现,内容区域使用 Fragment 里放的 VerticalGridView 实现,可能出现标题栏和内容区焦点切换不成功的问题,比如说,焦点不能从内容区切到标题栏这样的情况。这时使用 focusOutFront 和 focusOutEnd 属性能够解决问题。
/**
* Interface for highlighting the item that has focus.
*
*/
public interface FocusHighlight {
/**
* No zoom factor.
*/
public static final int ZOOM_FACTOR_NONE = 0;
/**
* A small zoom factor, recommended for large item views.
*/
public static final int ZOOM_FACTOR_SMALL = 1;
/**
* A medium zoom factor, recommended for medium sized item views.
*/
public static final int ZOOM_FACTOR_MEDIUM = 2;
/**
* A large zoom factor, recommended for small item views.
*/
public static final int ZOOM_FACTOR_LARGE = 3;
/**
* An extra small zoom factor.
*/
public static final int ZOOM_FACTOR_XSMALL = 4;
}
焦点放大失效
item的布局中如果是<Layout>嵌套<View>的形式,layout设置focusable和clickable="true",如不做其他处理,则不会焦点放大。
解决方案步骤:
1.<View>设置duplicateParentState="true"
2.在onBindViewHolder方法总获取对应<View>然后设置OnFocusChangeListener{if(hasFocus) setSelected(true) else setSelected(false)}}
duplicateParentState
子控件跟随父控件的状态走
setNumRows
用于设置行数
setRowHeight
是用来设置 HorizontalGridView 的 Item 的高度,而不是用来设置 HorizontalGridView 的高度