我使用SurfaceView进行程序界面的绘制,并在他的构造函数里使用setFocusable(true)获取焦点,然后重载了onKeyDown(int keyCode, KeyEvent event)来处理键盘事件。最后在Activity中使用 setContentView(SurfaceView)来让绘制的内容显示在窗口上。但是奇怪的是,SurfaceView无法获得键盘事件,键盘事件还是直接发送到Activity中去了。这到底怎么回事啊,我都执行获取焦点的语句了,该怎么解决这个问题?

解决方案 »

  1.   

    setContentView(SurfaceView)提到最前试试。
      

  2.   


    提到最前?这句话我是写在Activity的onCreate方法里的
      

  3.   

    那你在setFocusable后再requestFocus();
      

  4.   

    在activity的onKeyDown()方法中使用
    SurfaceView.onKeyDown(keyCode,event);
    试试:欢迎加入群:106501352一起学习
      

  5.   

    在activity有监听键盘事件的就去掉就可以了。
    或者在activity监听中return掉
      

  6.   

    return 有返回值就return true
      

  7.   

    需要加上setFocusableInTouchMode(true);setFocusableInTouchMode(true);
    setLongClickable(true);
    需要着两行才能正常工作 不要忘记 两行对应键盘焦点 不是一个键盘一个触屏