在WebView上禁用自动提示?

时间:2011-09-13 15:52:49

标签: android webview

我在WebView中有一些HTML文本输入,我需要禁用Android上这些输入的自动建议,而不是HTML(autocomplete = off)。

我该怎么做?

8 个答案:

答案 0 :(得分:29)

这个问题困扰了我很长一段时间,但解决方案非常简单:

webview.getSettings().setSaveFormData(false);

我在这里写到:

http://roysutton.com/2012/02/21/preventing-auto-fill-in-android-webview/

答案 1 :(得分:12)

以上建议的答案对我没有帮助。 所以我找到了下一个解决方案:我刚刚为WebView创建了一个简单的包装器并使用它。

public class NoSuggestionsWebView extends WebView {
    public NoSuggestionsWebView(Context context) {
        super(context);
    }

    public NoSuggestionsWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NoSuggestionsWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        InputConnection ic = super.onCreateInputConnection(outAttrs);

        outAttrs.inputType &= ~EditorInfo.TYPE_MASK_VARIATION; /* clear VARIATION type to be able to set new value */
        outAttrs.inputType |= InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD; /* WEB_PASSWORD type will prevent form suggestions */

        return ic;
    }
}

答案 2 :(得分:5)

除了setSaveFormData设置为False之外,这也帮助了我

WebView.getSettings().setSavePassword(false);
WebView.clearFormData();

答案 3 :(得分:1)

以上方法均无济于事,因此,在广泛搜索之后,我发现此方法在webview以及普通网站上均十分理想。文本区域也可以由输入文本字段替换:)

<textarea class="form-control" id="comments" autocomplete="off" autocorrect="off"  spellcheck="false"></textarea>

答案 4 :(得分:0)

我无法从Android方面做到这一点,但是在添加到webview的文本输入时,spellcheck =“false”就可以了。

<textarea spellcheck="false"></textarea>

答案 5 :(得分:0)

如果已有表单数据,则setSaveFormData(false)不会阻止它使用它。要清除数据库,您可能需要执行以下操作:

WebViewDatabase.getInstance(this).clearFormData();

答案 6 :(得分:0)

Kotlin中@lpsun的解决方案。

import android.content.Context
import android.text.InputType
import android.util.AttributeSet
import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputConnection
import android.webkit.WebView

class NoSuggestionsWebView : WebView {
    constructor(context: Context) : super(context)

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs,
        defStyle)

    override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection? {
        val ic = super.onCreateInputConnection(outAttrs)

        /* clear VARIATION type to be able to set new value */
        outAttrs.inputType = outAttrs.inputType and EditorInfo.TYPE_MASK_VARIATION.inv()
        /* WEB_PASSWORD type will prevent form suggestions */
        outAttrs.inputType = outAttrs.inputType or InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD

        return ic
    }
}

答案 7 :(得分:0)

在Android 8及更高版本中,您应该为系统自动填充功能设置textview子类的重要性:

android:importantForAutofill="noExcludeDescendants"

官方参考:Optimize your app for autofill

此外,出于安全考虑,您可能会尝试删除data / data / {your-app-package} / app_webview中的“ Web Data” sqlite文件。