记录TV开发中的一些盲点

常用组件

  • 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默认背景
    false
  • 方式三:不要使用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设置focusable和clickable="true",如不做其他处理,则不会焦点放大。

解决方案步骤:

1.<View>设置duplicateParentState="true"
2.在onBindViewHolder方法总获取对应<
View>然后设置OnFocusChangeListener{if(hasFocus) setSelected(true) else setSelected(false)}}

duplicateParentState
子控件跟随父控件的状态走

setNumRows
用于设置行数

setRowHeight
是用来设置 HorizontalGridView 的 Item 的高度,而不是用来设置 HorizontalGridView 的高度

你可能感兴趣的:(记录TV开发中的一些盲点)