Android WebView HTML能否影响键盘或键盘功能?

时间:2014-04-25 23:21:22

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

我有一个带有信用卡报名表格的webview(标准<input type="text" />字段)。在不同版本的Android中,我会得到不同的键盘。在表单内部,Kit-Kat似乎没有显示上一页 / 下一页键。

  1. 在网络方面,我对此有任何影响吗?
  2. 如果没有,那是什么 我应该向Android方面的开发者推荐吗?
  3. 没有上一页的示例 / 下一页

    相同的webview,上一页 / 下一页

    enter image description here

3 个答案:

答案 0 :(得分:18)

您可以从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。请将开发人员引荐到链接页面,您应该能够实现大多数键盘上的行为。

答案 1 :(得分:3)

你确实有一些微小的控制,但没有那么多。控件的类型(passowrd,数字,文本)将被发送到软键盘并用于更改事物的显示方式。但是,键盘根据这些选项做出的选择是键盘特定的 - 谷歌键盘的反应与Swype的反应不同,Swype的反应与Swiftkey不同,Swiftkey的反应与三星键盘的反应不同,等等。您无法真正依赖特定的行为。

答案 2 :(得分:1)

在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;
}