问题很简单。我必须模拟dpad事件(UP,DOWN,RIGHT,LEFT,CENTER),以便在我的GUI中导航,其中包含许多按钮和其他元素。使用模拟器D-Pad我可以在没有行代码的情况下导航此GUI。但是我该如何以编程方式执行此操作?
我尝试了很多但没有成功:
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_LEFT);
View.dispatchKeyEvent(event);
什么都没发生(焦点应该将一个元素移到右边)
我也读了很多关于windowManager.injectKeyEvent的内容,但发现没有任何效果。
我认为有一个解决方案,因为对讲可以模拟物理D-Pad(http://code.google.com/p/eyes-free/source/browse/trunk/ime/latinime/src/com/googlecode/eyesfree/inputmethod/latin/LatinIME.java)
答案 0 :(得分: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);
这就是一个内部算法,用于查找所选方向的下一个元素
答案 1 :(得分:1)
尝试使用KeyEvent.ACTION_UP而不是ACTION_DOWN。为我解决了类似的问题。
答案 2 :(得分:1)
您有两种方法可以实现目标:
首先,
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(int keycode);
先决条件:在同一过程中。
其次,对于考试,我想模拟KeyEvent.KEYCODE_DPAD_UP
getCurrentInputConnection().sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DPAD_UP));
先决条件:必须绑定inputmethd
答案 3 :(得分:0)
鉴于
InputConnection ic = getCurrentInputConnection();
您可以通过模拟DPAD向下/向上事件将光标移动到EditText
。 up事件可能已经足够了,但我要继续模拟完整的事件是安全的。
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_LEFT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_RIGHT));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_UP));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN));
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_DOWN));