Android WebView中的HTML输入keypress事件无法触发。

6

在某些设备上(主要是三星,但也包括其他设备),根据Android版本、WebView版本(即使是Android 7中的常青WebView)和键盘组合,存在一些问题:

  • keypress没有触发
  • keydownkeyup始终包含keyCode=229
  • keypressinput被触发,但不包含按键信息
  • textInput没有触发
  • maxlength属性在用户输入时不会应用于input[type=text](允许超过maxlength个字符,只有在提交表单时才验证输入)

有没有一种方法可以解决这些问题?

1个回答

7

我发现如果你扩展WebView并重写onCreateInputConnection,所有这些问题都会得到解决:

public class WebViewExtended extends WebView {
    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        // This line fixes some issues but introduces others, YMMV.
        // super.onCreateInputConnection(outAttrs);

        return new BaseInputConnection(this, false);
    }
}

在重写onCreateInputConnection之前:

before

在重写onCreateInputConnection之后(按下了g键):

after


真的:非常感谢你,无数次。你说的“修复了一些问题,但引入了其他问题,结果因人而异。”是什么意思? - VH-NZZ
@VH-NZZ 很高兴这对你有帮助。最初,没有 super 调用,我们发现有时用户会在另一个应用程序中打开数字键盘,当返回到我们的应用程序时,任何字段都只会打开相同的数字键盘,即使是文本字段也是如此。super 调用为我们解决了这个问题。但它在某些特定设备上引入了一个问题(我记不清是哪个设备了),即打字无法工作:用户按下键盘,但什么也没发生。这就是为什么你的结果可能会有所不同,你应该测试一下这个解决方案是否适用于你的具体情况。 - gabrielmaldi
感谢你的解释,伙计。这有点麻烦,但幸运的是我要针对的用户基数只有20人,而且都使用相同的硬件。 - VH-NZZ
一开始尝试了这个方法,但是没有起作用。直到我找到了这篇文章:https://medium.com/mobile-app-development-publication/managing-keyboard-on-webview-d2e89109d106 第四点:你需要在你的标记中添加 android:focusable="true"android:focusableInTouchMode="true" 才能使其正常工作。至少在 Android API Level 26 及以上版本中需要这样做。 - SqAR.org
这似乎会阻止输入法编辑器的工作 - 至少当我尝试时看到的结果是这样的。 - AndrewS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接