onKeyUp 未在显示软键盘的 EditText 上触发

onKeyUp not firing on EditText with Soft Keyboard shown

我们有一个需要键盘的网络视图。某些 Android 平台存在错误,导致键盘无法正常显示。因此我需要手动显示键盘(即来自 Java)。

问题是因为这是一个 webview,所以我没有 EditText 对象来创建键盘。因此,作为一种解决方法,我想手动显示键盘并将键输入传递给 webview。

我可以显示键盘没问题,但我无法触摸按键。

我阅读了 intercepting onKeyDown events,但无法正常工作。

我最好的尝试是:

  1. 使用覆盖的 onKeyUp
  2. 创建我的自定义 EditText class
  3. 让 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。