焦点设置 (一)

对焦点的处理是Android 电视开发与手机开发最大的区别之一。在手机上,关于焦点我们几乎不需要做额外的处理;而在电视机上则需要做大量的处理,如:焦点的显示样式(颜色、大小等)、焦点的导航、显示动画等。

focusable与focusableInTouchMode

在xml中对view设置属性:
android:focusable="true"
android:focusableInTouchMode="true"

动态设置:
View.setFocusable(true);
View.setFocusableInTouchMode(true)

上述属性focusable设置为true时当前控件才能获得焦点;反之,不能获得焦点。focusableInTouchMode用于设置是否可以通过触摸获取焦点。在手机应用开发中一般不需要对上述属性进行设置,电视应用很有必要,因为电视通常是通过遥控器来控制焦点的(也可以是鼠标)。

requestFocus

动态设置:
View.requestFocus();

xml中:
<requestFocus />

为控件设置焦点,通常会优先获取焦点(可能某些控件会抢夺焦点,如EditText)。打开页面时,通常会使用它来决定谁优先获得焦点。

descendantFocusability

当焦点获取出现问题是你可以尝试设置descendantFocusability属性 ,有以下三中值:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

建议简化布局层级,层级过多会导致焦点处理变得复杂,也很难实现特殊的焦点选中效果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容