【问题标题】:onKeyUp not firing on EditText with Soft Keyboard shownonKeyUp 未在显示软键盘的 EditText 上触发
【发布时间】:2016-01-06 23:50:09
【问题描述】:

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

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

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

我阅读了intercepting onKeyDown events,但我无法让它工作。

我最好的尝试是这样的:

  1. 使用重写的onKeyUp 创建我的自定义 EditText 类
  2. 让 webview 调用这个原生方法并让自定义 EditText 类请求焦点

我的自定义 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);
        }

【问题讨论】:

    标签: java android webview keyboard


    【解决方案1】:

    软件键盘很少发送按键事件。只有硬件键可以。软件键盘使用 commitText,而不是通过使用硬件按键事件模拟​​它来处理。如果您需要与键盘交互,您应该通过实现 InputConnection 并从焦点视图的 getInputConnection 返回您自定义的 InputConnection 类来实现。

    【讨论】:

    • 感谢您的提醒,我现在要调查一下
    猜你喜欢
    • 2023-03-08
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多