最近在做有关安卓TV的相关项目,与手机端的安卓开发不同的是,TV端需要我们对焦点进行一定的处理,才使得整个程序的逻辑符合我们的要求。在电视上进行操作,一般只能通过遥控的上下左右以及确认键来进行焦点的转移。而原生的安卓系统已经为我们做了默认的焦点获取处理,而这个默认的焦点则是自动选择该方向上距离最近的一个目标获得焦点,注意,这里的距离未必是直线距离,更多时候是该方向坐标的距离,比如:
成都创新互联公司成立于2013年,我们提供高端重庆网站建设、网站制作、成都网站设计公司、网站定制、成都全网营销、微信小程序开发、微信公众号开发、网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为水处理设备企业提供源源不断的流量和订单咨询。在这种情况下,在item1按下右键,item0将获得焦点,而在item0按下下键,item1将获得焦点,这往往会与我们的操作习惯不符。这时候就需要我们去控制焦点。当然了,最理想的情况是让系统自动帮我们处理焦点的获取,我们的布局可以做出适当的调整来使得焦点的变化符合逻辑,而在迫不得已的情况下,我们也可以通过以下的思路来改变。
1.在XML属性布局文件中,通过设置nextFocusDown , nextFocusLeft ,nextFocusRight ,和nextFocusUp,这些属性的值来明确焦点从当前view转移后的view的对应id。
2.通过设置focusable属性,来屏蔽部分控件的焦点获取。
3.通过代码中的requestFocus来在某一时刻使某控件强制获得焦点。
4.通过ViewTreeObserver.OnGlobalFocusChangeListener来监听全局的焦点变化,在焦点变化时进行代码操作。
5.对特定布局的按键事件进行拦截,然后手动设置焦点变化。
6.利用listview、gridview等adapterview的特性,当整体获得焦点时,再对item进行焦点分发,比如在需要保存选中状态的应用场景。
暂时我用到的主要是这些做法,日后可能会继续进行补充。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。