前言

Android TV是通过遥控器控制的,没有触摸事件的,而是处理

KeyEvent.KEYCODE_DPAD_UP
KeyEvent.KEYCODE_DPAD_DOWN
KeyEvent.KEYCODE_DPAD_CENTER
KeyEvent.KEYCODE_DPAD_LEFT
KeyEvent.KEYCODE_DPAD_RIGHT

等按键值。

然后就涉及到一些按键的焦点状态问题,这里简单的记录一下,方便自己查阅。

正文

这些焦点的状态可以用Java代码控制,也可以通过配置xml来控制。

focusable

是否要获取到焦点

android:focusable="true|false"

对应的代码

view.setFocusable(true|false);
setFocusableInTouchMode

是否触摸后获取到焦点

android:setFocusableInTouchMode="true|false"

对应的代码

view.setFocusableInTouchMode(true|false);

默认是false,也就不设置是,当用户点击是不会有聚焦被点击的控件的。

focusedByDefault

看文字意思是默认获取焦点的配置

android:focusedByDefault="true|false"

对应的代码

view.setFocusedByDefault(true|false)

当这个属性我项目中配置后没有效果。(后续跟进)

因此只要代码中通过设置requestFocus()强制获取焦点。

defaultFocusHighlightEnabled
android:defaultFocusHighlightEnabled="true|false"

对应的代码

view.setDefaultFocusHighlightEnabled(true|false);

原生控件获取焦点高亮显示。(项目中没用过这个)

控制焦点移动方向
nextFocusDown
nextFocusLeft
nextFocusRight
nextFocusUp

具体这里就不解释了。

setOnFocusChangeListener

这个是View监听焦点丢失和获取变化,然后做一定的处理。

参考文章

  1. Android TV开发过程及焦点问题处理
  2. Android TV 焦点控制
  3. 从源码出发浅析 Android TV 的焦点移动原理 (上篇)

相关文章

暂无评论

none
暂无评论...