建议 : 为了适配尽可能多的电视设备 , 推荐如下做法 :
① 设置可获取焦点 : 给 需要获取焦点的组件 , 统一添加 android:focusable=“true” 属性 ;
② 设置不可获取焦点 : 凡是 不需要获取焦点的组件 , 统一添加 android:focusable=“false” 属性 ;
③ 设置组件兼容 : 凡是涉及到 父容器 与 子组件 之间的焦点获取的情况 , 统一使用
android:descendantFocusability 属性 ;
参考学习资料:
https://blog.youkuaiyun.com/qq_44203816/article/details/131207841
http://www.taodudu.cc/news/show-3512378.html?action=onClick
https://www.cnblogs.com/cps666/p/17339599.html
默认焦点: https://blog.youkuaiyun.com/johnWcheung/article/details/76922352
焦点乱跑: https://www.jianshu.com/p/5524a5c9311f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
按键事件分发: https://www.codetd.com/article/15527758
获焦后,背景出现重叠问题: https://blog.youkuaiyun.com/snail201211/article/details/84990892
这个原因是动态设置背景的时机在判断默认背景之后,所以导致先绘制了一个默认背景,然后又绘制了自定义的背景,解决方案就是xml布局里面禁用默认背景:
android:defaultFocusHighlightEnabled=“false”
VerticalGridView第一行获取焦点后,再次按向上键,上方的控件获取不到焦点解决方案: https://blog.youkuaiyun.com/dongdengke123789/article/details/54427079
AndroidTV中使用RecyclerView的notifyDataSetChanged()方法刷新列表后会造成焦点缺失,解决办法是改用notifyItemRangeChanged(0,5)方法刷新所有数据,0代表position(recyclerview的开始位置),5代表刷新后item的数量。