2016-12-17 67 views
0

我正在嘗試爲類似於「Leanback Keyboard」應用的Android TV創建一個custom ime。我現在的問題是我需要處理KeyEvents(我們有一個遙控器,我需要特別聽D-pad inputs)。因爲我需要使用service(InputMethodService),所以我不能使用setOnKeyListener,而不像活動。但由於InputMethodService實際上使用對話框在屏幕上輸出一些UI,因此我可以使用dialog's setOnKeyListener代替。我已經試過如下:Android:InputMethodService.Dialog.setOnKeyListener未採取任何關鍵事件

public class MainActivity extends InputMethodService implements DialogInterface.OnKeyListener { 

@Override 
public View onCreateInputView() { 
    final LayoutInflater inflater = getLayoutInflater(); 
    layout_root = (RelativeLayout) inflater.inflate(R.layout.activity_main, null); 

    ... 

    getWindow().takeKeyEvents(true); 
    getWindow().setOnKeyListener(this); 

    return layout_root; 
} 

@Override 
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
    ... 
} 

我甚至明確提出在XML每個視圖是unfocusable,以確保該dialog gets the OnKey events

android:focusable="false" 
android:focusableInTouchMode="false" 

我明白,服務沒有得到安其事件但InputMethodService正在輸出一些UI元素,我覺得應該有一種方法。

我最後的手段是讓InputMethodService啓動一個透明的Activity來偵聽KeyEvent並將其廣播回InputMethodService。我不想那麼做,因爲我甚至不確定它會起作用。

提前感謝幫助。

回答

0

我想通了。 InputMethodServceonKeyDownonKeyUponKeyLongPressonKeyMultiple您覆蓋的方法。