2016-12-17 4 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) { 
    ... 
} 

私も明示的にdialog gets the OnKey eventsことを確認するunfocusableをするXML内のすべてのビューを作りました:

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

私はサービスがOnKeyイベントを取得しないことを理解InputMethodServiceはいくつかのUI要素を出力しているので、方法があるはずです。

私の最後の手段は、InputMethodServiceが、KeyEventsをリッスンしてInputMethodServiceにブロードキャストするトランスペアレントなアクティビティを開始することです。私はそれがうまくいくかどうかもわからないので、実際にやりたいとは思っていません。

事前にヘルプを評価してください。

答えて

0

私はそれを理解しました。 InputMethodServceは、上書きする方法がonKeyDown,onKeyUp,onKeyLongPressおよびonKeyMultipleです。

関連する問題