【问题标题】:Can Android WebView HTML influence keyboard or keyboard features?Android WebView HTML 会影响键盘或键盘功能吗?
【发布时间】:2017-08-16 17:01:11
【问题描述】:

我有一个带有信用卡输入表单的网络视图(带有标准的<input type="text" /> 字段)。在不同版本的 Android 中,我得到不同的键盘。 Kit-Kat 在表单内似乎不显示 Prev / Next 键。

  1. 在 web 端,我对此有什么影响吗?
  2. 如果不是,那是什么 我应该向 Android 端的开发者推荐吗?

没有Prev / Next的例子:

相同的 webview,带有 Prev / Next

【问题讨论】:

    标签: android android-webview android-ui android-softkeyboard


    【解决方案1】:

    您可以从 WebView 控制键盘,但正如其他答案所暗示的那样,它可能不适用于曾经制作的每个键盘。尽管如此,我通常会发现大多数主流键盘都实现了我想要的行为。

    WebView 有一个名为onCreateInputConnection 的方法。您可以挂钩此方法并向inputType 和/或imeOptions 添加(和/或删除)标志。您可以使用许多标志。

    查看EditorInfo 选项,尤其是IME_FLAG_NAVIGATE_NEXTIME_FLAG_NAVIGATE_PREVIOUS。请参阅下面的用法(从键盘选项中删除 prev/next 标志):

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
        outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT &
                    ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
        return inputConnection;
    }
    

    您可以尝试的另一件事是使用InputType 标志TYPE_TEXT_FLAG_NO_SUGGESTIONS 隐藏整个建议栏。请参见下面的示例(将“无建议”标志添加到输入类型):

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
        outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
        return inputConnection;
    }
    

    还有许多其他标志可用于直接从 WebView 自定义 IME。将开发人员推荐给链接页面,您应该能够在大多数键盘上实现您所追求的行为。

    【讨论】:

      【解决方案2】:

      你确实有一些最小的控制,但没有那么多。控件的类型(密码、数字、文本)将发送到软键盘并用于更改内容的显示方式。但是,键盘根据这些选项做出的选择是特定于键盘的——谷歌键盘的反应不同于 Swype,后者的反应不同于 Swiftkey,后者的反应不同于三星键盘等。你不能真正指望特定的行为。

      【讨论】:

      • 谢谢加布。我有什么可以告诉 Android 开发人员在这方面尝试的吗?
      • 这样做会很棘手。由于所有键盘,您基本上不知道用户使用哪一个。从理论上讲,如果所有 3rd 方键盘都以类似的方式编码,您甚至可以要求他们尝试解析“”标签的 html,并让他们在覆盖中应用键盘的 IME 选项。但是这种方法并不能保证成功。
      【解决方案3】:

      在 Android Studio 3.0 (SDK API 26) 上试过,答案https://stackoverflow.com/a/23462658/3286489 崩溃。经过进一步搜索发现这个工作。

      @Override
      public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
          InputConnection inputConnection = new BaseInputConnection(this, true);
          outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT &
                  ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
          return inputConnection;
      }
      

      @Override
      public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
          InputConnection inputConnection = new BaseInputConnection(this, true);
          outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
          return inputConnection;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        • 1970-01-01
        • 2017-06-24
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2012-04-03
        相关资源
        最近更新 更多