7

問題は非常に単純です。多くのボタンやその他の要素で構成される GUI でナビゲートするには、dpad イベント (UP、DOWN、RIGHT、LEFT、CENTER) をシミュレートする必要があります。シミュレータ D-Pad を使用すると、この GUI を行コードなしでナビゲートできます。しかし、どうすればプログラムでこれを行うことができますか?

私は成功せずに多くのことを試みました:

  • KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT); View.dispatchKeyEvent(event); 何も起こりません (フォーカスは 1 つの要素を右に移動する必要があります)

  • windowManager.injectKeyEvent についてもよく読みましたが、機能するものは何も見つかりませんでした。

  • また、インストルメンテーションはキーイベントのシミュレーションに役立ちますが、アプリケーション自体で使用するのではなく、テストに役立ちます。

トークバックは物理的な D-Pad をシミュレートできるため、解決策があると思います ( http://code.google.com/p/eyes-free/source/browse/trunk/ime/latinime/src/com/googlecode/eyesfree /inputmethod/latin/LatinIME.java )

4

4 に答える 4

2

私はスマートな解決策を見つけました(たとえば、ダウンするため):

bic=new BaseInputConnection(this.getWindow().getDecorView(),false);
KeyEvent event2 = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN,0, KeyEvent.META_SYM_ON, 0, 0, KeyEvent.FLAG_VIRTUAL_HARD_KEY); 

bic.sendKeyEvent(event2);

それだけです。選択した方向で次の要素を見つけるための内部アルゴリズム

于 2011-12-21T17:56:07.373 に答える
2

目標を達成するには、次の 2 つの方法があります。

初め、

Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(int  keycode);

前提条件: 同じプロセスで。

次に、たとえば KeyEvent.KEYCODE_DPAD_UP をシミュレートしたい

getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP));

前提条件:inputmethd をバインドする必要があります

于 2013-08-07T05:50:53.923 に答える