我正在嘗試爲類似於「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。我不想那麼做,因爲我甚至不確定它會起作用。
提前感謝幫助。