查询输入键在Android软键盘中不起作用

问题描述:

我需要监听某种终端仿真的按键。所以我没有任何EditText。但我成功查询输入键在Android软键盘中不起作用

public class Click implements View.OnClickListener 
    { 
    @Override 
    public void onClick (View view) 
     { 
     CursorText terminal = (CursorText) findViewById (R.id.term_window); 
     InputMethodManager manager; 
     manager = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); 
     manager.showSoftInput (terminal, InputMethodManager.SHOW_FORCED); 
     } 
    } 

产卵软键盘变量terminal这里是一个自定义类CursorText是从TextView衍生的一个实例。它具有属性android:textIsSelectable="true",因此它接受点击。否则它有android:imeOptions="flagNoExtractUi|flagForceAscii",但这些似乎没有任何不利影响。

我的问题现在正在接收按键。在调查API文档时,它看起来好像没有可靠的方式,就像在任何相关的文档中所述,它所描述的类和方法只适用于硬件键盘!但一定有办法。

我已经尝试了一些方法,其中onKeyListeneronKeyPreIme等等,大多数根本不反应。例如onKeyPreIme需要在View派生类中被覆盖,在我的情况下,明显的选择是类terminal是一个实例。这不是EditText,也许这就是onKeyPreIme永远不会被调用的原因。我相信在我的情况下,出于同样的原因,我不能使用TextWatcher

到目前为止最好的结果是在活动中覆盖onKeyDown。几乎每个键都会调用这个方法,包括Backspace;一个例外是一个最重要的键,即输入(返回)键。我有一种感觉,在我的和处理之前调用其他一些侦听器方法,但不传递Enter键事件。我不知道如何找出答案。

我与onKeyDown的其他问题是,它不会产生自动重复持有密钥。由于它似乎只报告KeyEvent.ACTION_DOWN,但没有KeyEvent.ACTION_UP,我无法自己创建自动重复。

我想我可以没有自动重复的生活,但没有回车键是一个表演停止。那么我如何解锁回车键事件?当按下回车键时,什么可以防止onKeyDown被调用?或者,我是否应该采用完全不同的方式来听按键?

顺便说一句。我正在对Lollipop和Kitkat进行测试,在真实硬件上使用CM,在模拟器上使用vintage-Google-Android,试图支持Jelly Bean。

SOftkeyboards很少创建关键事件。他们通常通过调用inputConnection.commitText来工作,该函数一次接收整个字符串。要做你想做的事,你需要将InputMethod与视图绑定,并覆盖视图的onCreateInputConnection,以返回可以正确处理commitText的自定义InputConnection。