还记得自己当初做基于安卓系统的机顶盒程序的时候一直犯困于无法自己控制焦点的移动,
在这里小弟分享一下如何自由的移动界面中不同控件的焦点:
例如:我们要把Gridview中item控件的焦点通过遥控器移动到界面中的一个TextView上,让TextView控件高亮显示
第一步:我们要重写TextView控件
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.TextView;
public class DyneTextView extends TextView {
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
// TODO Auto-generated method stub
super.onFocusChanged(focused, direction, previouslyFocusedRect);
//此处为该控件获得焦点后高亮显示
if(focused)
{
setBackgroundColor(Color.rgb(255,138,0));
}else
{
//此处为去掉控件高亮显示
setBackgroundColor(0);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d("onkeydown", "onkeydown");
return super.onKeyDown(keyCode, event);
}
public DyneTextView(Context context) {
super(context);
}
public DyneTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DyneTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}
接下来就是在xml布局文件中使用该控件了,在使用的时候一定要设置:android:focusable="true"
注:据我观察如果不设置以上属性:ImageView、TextView这些控件只会获取焦点不会高亮显示。
好了,就这样,机顶盒上面的焦点我们就可以自由的控制了。