Android TV 焦点与按键事件分析
Posted Cloud_Castle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android TV 焦点与按键事件分析相关的知识,希望对你有一定的参考价值。
转自:http://blog.csdn.net/yummykwok/article/details/56667260
在触摸屏出现在手机上之前,焦点是手机上人机交互中最重要的一个概念。焦点即用户当前的关注点(或区域),手机上将该区域以某种形式高亮显示,人们通过上、下、左、右方向键可以移动焦点,按确认键后手机将打开(或呈显)与当前焦点关联的内容;触摸屏的出现大大地简化了人机交互,触摸事件(TouchEvent)成了核心,焦点的存在感就很小了。
但是对于电视来说,其显示屏面积大,人机距离远,触摸屏的方案显然不合理。因此目前android电视的人机交互仍旧使用遥控器为主,焦点的重要性在电视上又显现出来了。通过遥控器将方向键或确认键信号(或信息)发送到电视端后,转换为标准按键事件(KeyEvent),而按键事件分发最终目标就是焦点。
1、初识View之焦点
View是UI组件的基本构建,也自然就是焦点的承载者。View是否可聚焦,由FOCUSABLE和FOCUSABLE_IN_TOUCH_MODE(触摸模式下也可以有焦点)两个FLAG标识。
[java] view plain copy
- public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes)
- this(context);
- final TypedArray a = context.obtainStyledAttributes(
- attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
- final int N = a.getIndexCount();
- for (int i = 0; i < N; i++)
- int attr = a.getIndex(i);
- switch (attr)
- ……
- case com.android.internal.R.styleable.View_focusable:
- if (a.getBoolean(attr, false))
- viewFlagValues |= FOCUSABLE;
- viewFlagMasks |= FOCUSABLE_MASK;
- break;
- case com.android.internal.R.styleable.View_focusableInTouchMode:
- if (a.getBoolean(attr, false))
- viewFlagValues |= FOCUSABLE_IN_TOUCH_MODE | FOCUSABLE;
- viewFlagMasks |= FOCUSABLE_IN_TOUCH_MODE | FOCUSABLE_MASK;
- break;
- ……
- ……
[java] view plain copy
- public class Button extends TextView
- ……
- public Button(Context context, AttributeSet attrs)
- this(context, attrs, com.android.internal.R.attr.buttonStyle);
- ……
Button设置了一个默认的style,我们找出源码看看,
[html] view plain copy- <stylenamestylename="Widget.Button">
- <itemnameitemname="background">@drawable/btn_default</item>
- <strong><itemnameitemname="focusable">true</item></strong>
- <itemnameitemname="clickable">true</item>
- <itemnameitemname="textAppearance">?attr/textAppearanceSmallInverse</item>
- <itemnameitemname="textColor">@color/primary_text_light</item>
- 以上是关于Android TV 焦点与按键事件分析的主要内容,如果未能解决你的问题,请参考以下文章
Android TV 开发焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )