2011-02-11 18 views
3

私のアプリケーションでは、ユーザがDPAD_LEFTを押すと、2つのDPAD_UPプレスを生成したいと思っています。 「getCurrentInputConnection()」メソッドを使用することができることに、私はInputMethodServiceを拡張する必要があると私のアプリケーションは、すでに別のクラスを拡張する原因、それは不可能である、プログラムでキープレスを生成する方法

@Override private boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { 

     keyDownUp(KeyEvent.KEYCODE_DPAD_UP); 

     keyDownUp(KeyEvent.KEYCODE_DPAD_UP); 

     return true; 

    } 
    return super.onKeyDown(keyCode,event); 
} 

private void keyDownUp(int a) { 

     getCurrentInputConnection().sendKeyEvent(

       new KeyEvent(KeyEvent.ACTION_DOWN, a)); 

     getCurrentInputConnection().sendKeyEvent(

       new KeyEvent(KeyEvent.ACTION_UP, a)); 

} 

しかし、私はそれがこのようなメソッドを使用して行うことができます知っています。これを解決する別の方法がありますか?

答えて

4

InputMethodServiceを拡張している別のクラスを作成し、アプリケーションから呼び出します。

0

私は(今、申し訳ありませんすることはできません)、これを試していない、それはハックのようなビットを感じていますが、このような何かを行うことができませんでした。

@Override private boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) { 
     super.onKeyDown(KeyEvent.KEYCODE_DPAD_UP,event); 
     return super.onKeyDown(KeyEvent.KEYCODE_DPAD_UP,event); 
    } 
    return super.onKeyDown(keyCode,event); 
} 

勿論を、あなたは可能性別のクラスを作成してアプリケーションから呼び出します。

+0

私が試したが、それはうまくいきませんでした:/ – sjor

+0

うーんeasyer方法は、現在のビュー階層のハンドラを取得し、それはこのようにメッセージを送信することです後で何が起こっているかをテストするかどうかを確認します。 – Nanne

1

イベントパイプラインを通過して完全に処理されるキーイベント(矢印などの特殊キーと同様に、フォーカスが変更される)を生成するには、物の基盤をタップする必要があります。インプットメソッドサービスの実装を作成できますが、面倒です。

public final static int DISPATCH_KEY_FROM_IME = 1011; 

KeyEvent evt = new KeyEvent(motionEvent.getAction(), keycode); 
Message msg = new Message(); 
msg.what = DISPATCH_KEY_FROM_IME; 
msg.obj = evt; 

anyViewInTheHierarchy.getHandler().sendMessage(msg); 

シンプル:)

+0

** anyViewInTheHierarchyについて詳しく調べることができます** –

1
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 
+1

ハードウェアキーボードAを番号2にマッピングする必要があります。これは、KeyDownからonKeyDownから呼び出して使用しましたイベントが処理されず、EditTextに入力タイプ番号がある場合に呼び出されます。それは動作するようです。 –

関連する問題