TV屏应用列表可编辑焦点方案

tv屏中,最难处理的就是焦点问题,而复杂的焦点处理要属应用列表模块了

根据展示的列表,可以翻页,默认焦点处于左上角第一个,此时通过遥控器上下左右可以控制焦点移动位置

焦点所在应用需要有个黄色边框标识,往右移动到边界,自动到下一行,继续往右移动到边界底部自动翻页,往下移动到底部自动翻页

长按应用弹出编辑框,可以进入编辑模式,编辑模式下应用高亮显示,可以移动应用位置,按确定跟返回退出编辑模式,编辑模式下焦点不可以超出边界

需求基本类似,常见问题一般会有下面这些

1、列表使用recyclerview刷新数据后焦点错乱

2、界面中存在多个fragment或者窗口时(比如状态栏是一个单独的fragment),刷新界面会被其它页面抢占焦点

3、焦点来回切换页面时不好控制,被抢占焦点

以上问题看似没几个,但是列表编辑状态,下载应用刷新,编辑模式下禁止焦点离开列表,这种类似的处理很多

很多时候只能强制获取焦点,避免被抢占问题,又或者刷新时延迟一下刷新完在重新恢复焦点,但是很难处理

于是想到一个比较丝滑的处理方式,全部通过按键监听去控制,绘制一个伪焦点处理

移动逻辑封装到工具类中,对外提供移动的方法

优点是没有延迟跟兼容性问题,落焦的速度得到大幅度提升,扩展性强

缺点就是需要控制焦点的一些移动逻辑,增加了代码量