Android TV开发一
在Android TV关于焦点的控件有两种,一种是本来就 可点击的控件(比如Button、CheckBox),一种是本来 不可点击的控件(TextView、ImageView)。
可点击控件
对于可点击控件种控件则无需去主动获取焦点,通过遥控器可以上下左右移动到另外一个可以点击的控件,想要监听点击事件的话,实现OnclickListener就可以了。
不可点击控件
对于不可点击控件,则需要事先在xml文件里面配置以下属性
android:focusable="true"
或者java代码中配置以下代码
View.setFocusable(true);
这样,就可以通过遥控器操作上下左右使焦点移动到原本不可点击的控件上面了。
View.OnKeyListener执行两次的问题
View.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN){//拦截按下事件
return false;
}
// if (event.getAction() == KeyEvent.ACTION_UP){//拦截抬起事件
// return false;
// }
...
return false;
}
});
以上代码监听了控件的按键事件(控件需要是获取到焦点的控件,可参考可点击控件或者不可点击控件),KeyEvent 中有两种事件,一种是按下和抬起等事件,一种是遥控器的上下左右等按键,当每个动作执行一个按下和一个抬起事件,所以每次点击遥控器均会执行两次事件。解决办法是只监听其中一种事件
强制获取焦点
View.requestFocus()