我们有一个需要键盘的webview。某些Android平台存在一个错误,导致键盘无法正常显示。因此,我需要手动显示键盘(即来自Java)。
问题是因为这是一个webview,我没有EditText
对象来创建键盘。因此,作为一种解决方法,我想手动显示键盘并将键输入传递给webview。
我可以显示键盘没问题,但我无法触及按键。
我在intercepting onKeyDown events上读到了,但我无法让它发挥作用。
我最好的尝试是:
onKeyUp
我的自定义EditText(KeyboardText)已创建,但onKeyUp未触发。你能告诉我我是如何获得onKeyUp事件的吗?
这是我自定义的EditText,用于拦截关键事件。
class KeyboardText extends EditText
{
public KeyboardText(Context context)
{
// THIS FIRES
super(context);
Log.d("", "Created KeyboardText");
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
// THIS DOES NOT FIRE
Log.d("","Got Key Up");
return true;
}
这是我调用键盘的地方:
KeyboardText text = new KeyboardText(cordova.getActivity());
text.setFocusable(true);
text.setFocusableInTouchMode(true);
if (text.requestFocus())
{
Log.d("", "Success");
InputMethodManager manager = (InputMethodManager)cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
manager.showSoftInput(text, InputMethodManager.SHOW_FORCED);
}
答案 0 :(得分:2)
软件键盘很少发送关键事件。只有硬件键才能。软件键盘使用commitText,而不是通过使用硬件键事件来模拟它。如果需要与键盘交互,则应通过实现InputConnection并从焦点视图的getInputConnection返回自定义的InputConnection类来实现。