Android TV 焦点上下左右移动
2014-12-24 16:37
399 查看
第一种方法:采用Android自带的直接控制焦点上下左右的方法。这种方法的前提是必须知道每个view的id,因此在进行布局时有必须要通过view.setId(...)指定view的特定ID,然后通过view.setNextLeftView(...)等四个方法控制该view的上下左右移动后所到达的view。
第二种方法是:在一些比较复杂的Layout中,特别是涉及到在View的焦点变化的过程中还要控制view的背景以及字体颜色变化等。比如:在有多个Layout(假设有Layout1, Layout2, Layout3,每个Layout中都有若干个ImageButton),当你从Layout1中的某个ImageButton
1.1中移动Layout2中ImageButton 2.1,此时ImageButton 1.1要标识为被选中,但是失去焦点,此时ImageButton 2.1是选中并且获取焦点,再从ImageButton 2.1移到ImageButton 3.1的过程中也是这种情况。对于这样一种情况,你必须对每个ImageButton 设置焦点捕获实际(setOnFocusChangeListener),在该监听事件中处理,(注:下面代码即兴写的,大概就是这个意思 --^_^-- )
ImageButton.setOnFocusChangeListener(){
public void onFocus(boolean Focus){
if( Focus ){
// ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景
} else{
// // ImageButton 2.1 获焦时, ImageButton 2.1 改变失去焦点背景 , ImageButton 3.1也改变获取焦点背景
}
}
}
还有就是当你当前焦点移动到ImageButton 3.1上时,你有时需要知道此时Layout1、Layout2上是哪个ImageButton 被选中,因此你还必须设置三个ImageButton 变量(标识选中哪个布局中的那个ImageButton 对象),和三个int变量(标识选中哪个布局中的第几个)。
通过这些标识,你就可以很方便的了解到那个聚焦和哪个失去焦点了。
对于进行上下左右的控制,此时就要在OnKeyDown事件中进行捕获处理了。由于事先已经知道是哪个Layout中的哪个ImageButton被选中了,而此时你进行上下左右操作是在你被选中的View上进行操作的,因此在OnKeyDown中你只需先判断是哪个View被选中,然后根据按键事件来移动View(通过之前设置的int标识进行移动)(注:由于是即兴写的,可能部分代码有错误,这里只是描述这个意思,--^_^--)
假设Layout1中被选中的ImageButton为mFirstImgBtn, 序号为mFirstIndx;
Layout2中被选中的ImageButton为mSenondImgBtn, 序号为mSenondIndx;
Layout3中被选中的ImageButton为mThirdImgBtn, 序号为mThirdIndx;
每个Layout里面的ImageButton均在一个数组中,假设分别为:ImageButton mImgBtnArray1[], mImgBtnArray2[], mImgBtnArray3[],
当前被选中的view为 mSenondImgBtn
public void OnKeyDown(int keyCode, KeyEvent event){
if( event.KEYCODE_DROP_UP== keyCode ){ //如果按下的是上键
mImgBtnArray1[ThirdIndx ].requestFocus;
}
if( event.KEYCODE_DROP_DOWN == keyCode ){ //如果按下的是下键
mImgBtnArray3[ ThirdIndx ].requestFocus;
}
if( event.KEYCODE_DROP_LEFT == keyCode ){ //如果按下的是左键
mImgBtnArray1[ ThirdIndx-1 ].requestFocus;
}
if( event.KEYCODE_DROP_RIGHT == keyCode ){ //如果按下的是右键
mImgBtnArray1[ ThirdIndx+1 ].requestFocus;
}
}
而具体的获焦事件处理则在每个View的 OnFocusChangeListener 事件中处理。
第二种方法是:在一些比较复杂的Layout中,特别是涉及到在View的焦点变化的过程中还要控制view的背景以及字体颜色变化等。比如:在有多个Layout(假设有Layout1, Layout2, Layout3,每个Layout中都有若干个ImageButton),当你从Layout1中的某个ImageButton
1.1中移动Layout2中ImageButton 2.1,此时ImageButton 1.1要标识为被选中,但是失去焦点,此时ImageButton 2.1是选中并且获取焦点,再从ImageButton 2.1移到ImageButton 3.1的过程中也是这种情况。对于这样一种情况,你必须对每个ImageButton 设置焦点捕获实际(setOnFocusChangeListener),在该监听事件中处理,(注:下面代码即兴写的,大概就是这个意思 --^_^-- )
ImageButton.setOnFocusChangeListener(){
public void onFocus(boolean Focus){
if( Focus ){
// ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景
} else{
// // ImageButton 2.1 获焦时, ImageButton 2.1 改变失去焦点背景 , ImageButton 3.1也改变获取焦点背景
}
}
}
还有就是当你当前焦点移动到ImageButton 3.1上时,你有时需要知道此时Layout1、Layout2上是哪个ImageButton 被选中,因此你还必须设置三个ImageButton 变量(标识选中哪个布局中的那个ImageButton 对象),和三个int变量(标识选中哪个布局中的第几个)。
通过这些标识,你就可以很方便的了解到那个聚焦和哪个失去焦点了。
对于进行上下左右的控制,此时就要在OnKeyDown事件中进行捕获处理了。由于事先已经知道是哪个Layout中的哪个ImageButton被选中了,而此时你进行上下左右操作是在你被选中的View上进行操作的,因此在OnKeyDown中你只需先判断是哪个View被选中,然后根据按键事件来移动View(通过之前设置的int标识进行移动)(注:由于是即兴写的,可能部分代码有错误,这里只是描述这个意思,--^_^--)
假设Layout1中被选中的ImageButton为mFirstImgBtn, 序号为mFirstIndx;
Layout2中被选中的ImageButton为mSenondImgBtn, 序号为mSenondIndx;
Layout3中被选中的ImageButton为mThirdImgBtn, 序号为mThirdIndx;
每个Layout里面的ImageButton均在一个数组中,假设分别为:ImageButton mImgBtnArray1[], mImgBtnArray2[], mImgBtnArray3[],
当前被选中的view为 mSenondImgBtn
public void OnKeyDown(int keyCode, KeyEvent event){
if( event.KEYCODE_DROP_UP== keyCode ){ //如果按下的是上键
mImgBtnArray1[ThirdIndx ].requestFocus;
}
if( event.KEYCODE_DROP_DOWN == keyCode ){ //如果按下的是下键
mImgBtnArray3[ ThirdIndx ].requestFocus;
}
if( event.KEYCODE_DROP_LEFT == keyCode ){ //如果按下的是左键
mImgBtnArray1[ ThirdIndx-1 ].requestFocus;
}
if( event.KEYCODE_DROP_RIGHT == keyCode ){ //如果按下的是右键
mImgBtnArray1[ ThirdIndx+1 ].requestFocus;
}
}
而具体的获焦事件处理则在每个View的 OnFocusChangeListener 事件中处理。
相关文章推荐
- 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
- 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
- Android 控件的显示隐藏上下左右移动动画
- Android 控件的显示隐藏上下左右移动动画
- Android 仿QQ菜单背景图片的左右上下移动属性动画实现
- Android TV RecyclerView焦点移动飞框的实现
- 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
- Android一个类似腾讯 QQ 背景图片可以上下左右移动的 imageview
- Android 控件的显示隐藏上下左右移动动画
- Android——滑动监听RecyclerView线性流+左右划删除+上下移动
- Android 控件的显示隐藏上下左右移动动画
- Android 滑动监听RecyclerView线性流+左右划删除+上下移动
- jQuery-利用上下左右键移动输入焦点
- Android软键盘上移动焦点&&Android TV定制输入法
- 利用键盘上的上下左右(回车)键模拟出tab 键的功能上下左右移动焦点
- Android 控件的显示隐藏上下左右移动动画
- jquery 实现上下左右回车键按下 移动文本框焦点
- Android TV ListView通过遥控器上下键,平滑移动item
- android tv 焦点移动特效
- Android中RecyclerView在TV中处理控件焦点移动,EditText值的修改,CheckBox复用等问题解决