onDraw都可以,但onKeyDown却不可以。这是为什么?
public class Chessboard extends View {
private final Paint paint = new Paint();

//构造
public Chessboard(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.RED);
}

@Override
protected void onDraw(Canvas canvas) {
//成功画了一根线
canvas.drawLine(0, 0, 100, 100, paint);
    }

//监听键盘事件
@Override
    public boolean onKeyDown(int keyCode, KeyEvent msg) {
        return true;
}
}

解决方案 »

  1.   

    不用安装监听器吗?setOnKeyListener(),再说你这函数里什么都没做啊,光返回了true
      

  2.   

    楼主onKeyDown函数中也没进行什么操作啊?
      

  3.   


        //监听键盘事件
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent msg) {
           System.out.println("test");  //在这里打个断点 代码没问题
           return true;
        }
      

  4.   

    你onKeyDown里面什么都没写怎么知道不行?
    还有Activity里面如果也有键盘监听也可能出现无效的问题
      

  5.   


    调试模式下,打了断点,不会进入。所以知道不行。下面打了一些log,就更清楚了。
    重载的函数onDraw进入一次。
    重载的函数onTouchEvent点触摸屏,就会进入。
    重载的函数onKeyDown点键盘,没反应。因为Chessboard extends View,重载了三个函数,却独独它【onKeyDown】的重载没反应。
    这是不是说,onKeyDown仅重载,不能保证有效,还欠缺了什么?在此,想问问大家,是不是还漏了什么步骤?
    //棋盘
    public class Chessboard extends View {
    //构造
    public Chessboard(Context context, AttributeSet attrs) {
    super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
            Log.v("Chessboard", "onDraw"); 
        }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    Log.v("Chessboard", "onTouchEvent");
    return true;
    }

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent msg) {
    Log.v("Chessboard", "onKeyDown");  
            return true;
    }
    }
      

  6.   

    让onTouchEvent return false;看onKeyDown能进入不
    点击屏幕或者点击home键盘,back键盘,都不进入onKeyDown?
      

  7.   

    会不会View没有获得焦点?
    v.setFocusableInTouchMode(true);
    不行的话Foucasable都搞成True看看
      

  8.   

    的确是因为焦点
    在:
    public Chessboard(Context context, AttributeSet attrs) {
    super(context, attrs);
    }
    中,加上
    setFocusable(true);
    setFocusableInTouchMode(true);键盘事件都能响应了!
    这俩个函数,看起来不太一样。但功效都OK的。