【问题标题】:Android WebView HTML input keypress doesn't fireAndroid WebView HTML 输入按键不会触发
【发布时间】:2017-12-31 22:13:48
【问题描述】:

在某些设备(主要是三星,但也有其他设备)和以下设备的组合上:Android 版本、WebView 版本(即使是 Android 7 中的常青 WebView)和键盘,存在许多问题:

  • keypress 不会被解雇
  • keydownkeyup 始终包含 keyCode=229
  • keypressinput 被触发但不包含密钥
  • textInput 不会被解雇
  • input[type=text] 在用户键入时不支持 maxlength 属性(允许使用超过 maxlength 的字符,并且仅在提交表单时验证输入)

有没有办法解决这些问题?

【问题讨论】:

    标签: javascript java android input webview


    【解决方案1】:

    我发现如果你扩展 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之前:

    覆盖onCreateInputConnection后(g被按下):

    【讨论】:

    • 说真的:谢谢大约一百万次??。您所说的“修复了一些问题但引入了其他问题,YMMV”是什么意思?
    • @VH-NZZ 很高兴这对您有所帮助。最初,在没有super 调用的情况下,我们发现有时用户会在另一个应用程序中打开数字键盘,当返回我们的应用程序时,只会为 any 字段打开相同的数字键盘,即使对于文本字段。 super 电话为我们解决了这个问题。但它在某些特定设备(不记得是哪个)中引入了一个问题,在这些设备中打字不起作用:用户会敲击键盘,但什么也没有发生。这就是您的里程可能会有所不同的原因,您应该测试此解决方案是否适用于您的特定场景。
    • 为这个解释干杯。管理起来有点麻烦,但幸运的是,我的目标用户群约为 20 人,并且都使用相同的硬件。
    • 试过这个,它最初没有工作。直到我找到这个:medium.com/mobile-app-development-publication/… 第 4 点:您必须将 android:focusable="true"android:focusableInTouchMode="true" 添加到您的标记中才能使其正常工作。至少 Android API Level 26 及以上。
    • 这似乎会阻止 IME 工作 - 至少这是我尝试此操作时看到的结果。
    猜你喜欢
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多