查询输入键在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文档时,它看起来好像没有可靠的方式,就像在任何相关的文档中所述,它所描述的类和方法只适用于硬件键盘!但一定有办法。
我已经尝试了一些方法,其中onKeyListener
,onKeyPreIme
等等,大多数根本不反应。例如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。