(注:下面代码即兴写的,大概就是这个意思 –^_^– )
& M7 Q. r' Y2 g# T, n
ImageButton.setOnFocusChangeListener(){ * e: K: G8 ^* ` J% _
public void onFocus(boolean Focus){ 7 l# _/ t& C6 Z
if( Focus ){
4 }! d$ F$ ]- P3 ~6 D# C
// ImageButton 2.1 获焦时, ImageButton 2.1 改变获取焦点背景, ImageButton 1.1也改变失去焦点背景 6 [/ @9 f5 p0 {# E) R& n
} else{
3 S) a! } U" M
// ImageButton 2.1 获焦时, ImageButton 2.1 改变失去焦点背景 , ImageButton 3.1也改变获取焦点背景 % V; `/ e2 T4 [: C* F; Q d+ i
}
7 j8 P7 J$ i( U, L+ f
6 ?+ m/ H0 p( y0 D6 |
}1 R- n$ n0 w6 |% W! a8 f/ {% r
}复制代码
9 H" X6 _' R4 J- }. i
还有就是当你当前焦点移动到ImageButton 3.1上时,你有时需要知道此时Layout1、Layout2上是哪个ImageButton 被选中,因此你还必须设置三个ImageButton 变量(标识选中哪个布局中的那个ImageButton 对象),和三个int变量(标识选中哪个布局中的第几个)。
通过这些标识,你就可以很方便的了解到那个聚焦和哪个失去焦点了。
对于进行上下左右的控制,此时就要在OnKeyDown事件中进行捕获处理了。由于事先已经知道是哪个Layout中的哪ImageButton被选中了,而此时你进行上下左右操作是在你被选中的View上进行操作的,因此在OnKeyDown中你只需先判断是哪个View被选中,然后根据按键事件来移动View(通过之前设置的int标识进行移动)(注:由于是即兴写的,可能部分代码有错误,这里只是描述这个意思,–^_^–)假设Layout1中被选中的ImageButton为mFirstImgBtn, 序号为mFirstIndx;
Layout3中被选中的ImageButton为mThirdImgBtn, 序号为mThirdIndx;
每个Layout里面的ImageButton均在一个数组中,3 `+ k: G1 l: ^( |) B
假设分别为:ImageButton mImgBtnArray1[], mImgBtnArray2[], mImgBtnArray3[]
当前被选中的view为 mSenondImgBtn# S" t/ q; e( U6 U
7 j9 h0 G8 _. F* A
public void OnKeyDown(int keyCode, KeyEvent event){5 _9 ~3 |! o* N* F/ }& H
" L; g5 K& g7 j/ k7 i l4 h* P
if( event.KEYCODE_DROP_UP== keyCode ){ //如果按下的是上键
) A, o7 j* Z3 v% F, a
" H" ^- j' j' V# `
mImgBtnArray1[ThirdIndx ].requestFocus;
9 Q7 X# b2 f8 C, @7 ]* M
6 K& B' K. p9 t6 `
}
# I, o/ f) B b& P4 i
( o$ _7 l7 y2 \) ?) P
if( event.KEYCODE_DROP_DOWN == keyCode ){ //如果按下的是下键( |$ W% l5 M- L" }. c4 T- }
4 ^$ t6 ~; `/ t5 r/ D/ G
mImgBtnArray3[ ThirdIndx ].requestFocus;
" O" x0 C; _! y4 F4 P- H! o
& V4 ^. ^4 _( d8 Q8 \ r5 h' h
}
0 p2 D. n8 {) N0 J7 v% B
4 V4 Z; |6 [4 P$ P9 G9 t- b3 l
if( event.KEYCODE_DROP_LEFT == keyCode ){ //如果按下的是左键' Z# T+ [! t: R- [* t$ E! S
! r. R6 ?0 n2 S- J1 ]
mImgBtnArray1[ ThirdIndx-1 ].requestFocus;: z2 z8 R# N" j2 B0 o( H# f+ q
, N( e" Q5 B, R$ P
}
$ U1 C( X+ ?4 Q. {; {
/ } c3 [2 l2 u
if( event.KEYCODE_DROP_RIGHT == keyCode ){ //如果按下的是右键9 k$ h- p' O7 I8 A
. Q0 r0 D4 Q. p( }
mImgBtnArray1[ ThirdIndx+1 ].requestFocus; / ~' p. c8 _. a' k! P
5 i; i- B/ a( t$ D/ U
}
: O; f ^- N9 ?% Q
( q7 j$ t( x8 y! \6 l0 z: {
}
! g6 y# Z4 z o$ U5 ^+ L复制代码* ?8 L: x. M1 ] G4 g
而具体的获焦事件处理则在每个View的 OnFocusChangeListener 事件中处理。