退格键事件未在Android 4.1+ webview上触发

时间:2014-04-30 03:34:40

标签: android webview backspace

在webview或默认浏览器中,只有当输入不为空时,我才能收到退格键事件(keyup,keydown和keypress),好像这是android 4.1 +的错误。

您可以在下面尝试此页面(使用Android设备打开它) http://javascript.info/tutorial/keyboard-events#test-stand-test-stand

我通过创建自定义InputConnection尝试了答案herehere

它现在正在工作,即使输入为空,我也可以收到退格键事件,但是有副作用:

我不能再输入单词和短语(第1张和第2张照片),

我一次只能输入一个字母或字符(第3张图片)。

enter image description here enter image description here enter image description here

我该如何解决这个问题,有没有解决办法?感谢。

2 个答案:

答案 0 :(得分:3)

我不知道你的情况,但在我的情况下qwerty键盘有退格键控/键盘事件但数字不触发退格键事件我的android版本是4.4.2 我已经修改了你在这两篇帖子中使用过的代码。只需使用此代码,您的退格键事件就会被触发

这是扩展的webview类,我们在其中定义自己的onCreateInputConnection 和ExtenderInputConnection是我的类,它扩展了基本输入连接,其代码也在下面给出

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    super.onCreateInputConnection(outAttrs);
    //This Code is for showing Decimal point in numeric Keyboard
    if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
    {
        outAttrs.inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
    }
    else
    {
        InputConnection connection = super.onCreateInputConnection(outAttrs);
        return connection;
    }
     return new ExtenderInputConnection(this,false);
}

以下是ExtenderInputConnection的代码

import android.text.InputType;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;

public class ExtenderInputConnection extends BaseInputConnection implements InputConnection{

public ExtenderInputConnection(View targetView, boolean fullEditor) {
    super(targetView, fullEditor);
    // TODO Auto-generated constructor stub
}

@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {       
    if (beforeLength == 1 && afterLength == 0) {
        // backspace
        return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
    }

    return super.deleteSurroundingText(beforeLength, afterLength);
    }
}

答案 1 :(得分:0)

您需要使用onkeyup / keydown / keypress事件吗?它们不能很好地适应移动输入模型,这就是存在这些错误的原因。作文活动会为您提供更好的解决方案吗[1]?

[1] https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent