onKeyUp没有在带有软键盘的EditText上触发

时间:2016-01-06 23:50:09

标签: java android webview keyboard

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

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

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

我在intercepting onKeyDown events上读到了,但我无法让它发挥作用。

我最好的尝试是:

  1. 使用重写的onKeyUp
  2. 创建我的自定义EditText类
  3. 让webview调用此本机方法并具有自定义EditText类请求焦点
  4. 我的自定义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);
            }
    

1 个答案:

答案 0 :(得分:2)

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