Android – 获取键盘按键

我想赶上softkeyboard的任何键的新闻。 我不想在我的活动中使用EditView或TextView,必须从我的活动中的扩展视图处理事件。

我只是试过这个:

1)重写onKeyUp(int keyCode, KeyEvent event) Activity方法。 这不适用于软键,它只是抓几个硬键盘

2)创build我的OnKeyListener并在我的视图中注册,包含一个注册和工作的OnTouchListener 。 这对softkeyboar根本不起作用。

3)重写onKeyUp(int keyCode, KeyEvent event) View方法。 如果我设置我的OnKeyListener,如果我不设置它,这一切都不工作。

4)使用InputMethodManager对象调用方法showSoftInput并将其传递给View。 这不起作用,既不提高键盘,的确我必须调用toggleSoftInput ; 也没有抓住关键事件。

我只在模拟器中进行了testing,但是我认为这已经足够了。 为什么从键盘上拿一个简单的关键事件是如此复杂?

尝试在您的Activity使用dispatchKeyEvent(KeyEvent event)

 @Override public boolean dispatchKeyEvent(KeyEvent event) { Log.i("key pressed", String.valueOf(event.getKeyCode())); return super.dispatchKeyEvent(event); } 

随着vasart的提示,我可以得到KeyPress事件。 为了使键码可打印我已经使用函数getUnicodeChar传递它的元button状态,然后只是一个字符铸造解决问题。

这是工作代码

 @Override public boolean dispatchKeyEvent(KeyEvent KEvent) { int keyaction = KEvent.getAction(); if(keyaction == KeyEvent.ACTION_DOWN) { int keycode = KEvent.getKeyCode(); int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() ); char character = (char) keyunicode; System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" + keycode); } return super.dispatchKeyEvent(KEvent); } 

当然这个工作只能用ASCII字符。

没有select只能通过硬件键盘处理软键盘(屏幕键盘)上的按键事件。

有关更多详细信息: 处理键盘操作

当在活动中打开键盘时,您的活动实际上变成了前景…所有TextArea或TextFields都有自己的机制,可以从屏幕键盘上获取按键…如果要使用虚拟键盘的onKeyDown()列表程序,请确保在AndroidManifest文件下你的活动android:windowSoftInputMode =“stateAlwaysVisible”,那么onkeyDown()将工作它确实为我工作…