我在WebView中有一些HTML文本输入,我需要禁用Android上这些输入的自动建议,而不是HTML(autocomplete = off)。
我该怎么做?
答案 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文件。