2014-01-27 58 views
0

我需要將自定義觸摸和硬件密鑰處理附加到SurfaceView。我需要使用單獨的偵聽器(而不是將dispatchKeyEvent()dispatchTouchEvent()方法添加到SurfaceView),因爲我將向第三方提供自定義事件處理功能以在其SurfaceView上使用,並且我希望將其單獨保存。將View.OnKeyListener附加到SurfaceView中

我的自定義觸摸事件處理程序工作正常,但事件處理程序不捕捉任何事件。下面是我如何設置它們:

public MyGLSurfaceView(Context c, AttributeSet a) { 
    // Other setup... 
    setOnTouchListener(new MyTouchListener()); // Works 
    setOnKeyListener(new MyKeyListener()); // No events captured 

} 

這是我的關鍵聽衆:

public class MyKeyListener implements View.OnKeyListener { 
    @Override 
    public boolean onKey(View v, int key, KeyEvent e) { 
     System.out.println("A hardware key was pressed!"); 
     return true; 
    } 
} 

我應該在關鍵監聽連接到不同的對象比SurfaceView?該視圖位於Dialog內部,因此我可以將我的按鍵偵聽程序添加到該按鈕中嗎?

回答

1

默認情況下,SurfaceView不可聚焦,然後不會廣播keyevent。 您需要激活焦點:

setFocusable(true); 
setFocusableInTouchMode(true); 
requestFocus(); 
//And now you set your OnKeyEventListener 

注意,通過對失去另一種觀點的焦點,這一次不會,直到它再次接收到焦點收到任何事件。

+0

完美,謝謝! –