onKeyUp 未在显示软键盘的 EditText 上触发
onKeyUp not firing on EditText with Soft Keyboard shown
我们有一个需要键盘的网络视图。某些 Android 平台存在错误,导致键盘无法正常显示。因此我需要手动显示键盘(即来自 Java)。
问题是因为这是一个 webview,所以我没有 EditText
对象来创建键盘。因此,作为一种解决方法,我想手动显示键盘并将键输入传递给 webview。
我可以显示键盘没问题,但我无法触摸按键。
我阅读了 intercepting onKeyDown events,但无法正常工作。
我最好的尝试是:
- 使用覆盖的
onKeyUp
创建我的自定义 EditText class
- 让 webview 调用本机方法并让自定义 EditText class 请求焦点
我的自定义 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);
}
软件键盘很少发送按键事件。只有硬件键可以。软件键盘使用 commitText 而不是通过使用硬件键事件模拟它来处理。如果您需要与键盘交互,您应该通过实现 InputConnection 并从聚焦视图的 getInputConnection 返回自定义的 InputConnection class。
我们有一个需要键盘的网络视图。某些 Android 平台存在错误,导致键盘无法正常显示。因此我需要手动显示键盘(即来自 Java)。
问题是因为这是一个 webview,所以我没有 EditText
对象来创建键盘。因此,作为一种解决方法,我想手动显示键盘并将键输入传递给 webview。
我可以显示键盘没问题,但我无法触摸按键。
我阅读了 intercepting onKeyDown events,但无法正常工作。
我最好的尝试是:
- 使用覆盖的
onKeyUp
创建我的自定义 EditText class
- 让 webview 调用本机方法并让自定义 EditText class 请求焦点
我的自定义 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);
}
软件键盘很少发送按键事件。只有硬件键可以。软件键盘使用 commitText 而不是通过使用硬件键事件模拟它来处理。如果您需要与键盘交互,您应该通过实现 InputConnection 并从聚焦视图的 getInputConnection 返回自定义的 InputConnection class。