Android中如何阻止EditText自动联想谷歌账户名称?
嘿,我之前做项目时也遇到过完全一样的困扰!textNoSuggestions这个属性有时候确实搞不定系统级的自动填充,尤其是谷歌账户这种和系统绑定的建议。给你几个亲测有效的方案,按顺序试试:
方案1:组合使用inputType属性
单纯的textNoSuggestions可能不够,试试把它和textFilter或者textVisiblePassword(这个更激进但有效)组合起来,让系统认为这是不需要自动填充的输入场景。示例代码:<EditText android:id="@+id/et_package_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="包裹名称" android:inputType="textFilter|textNoSuggestions" />如果还是不行,换成
textVisiblePassword|textNoSuggestions,这个会彻底关闭所有输入建议,适合完全不需要联想的场景。方案2:禁用自动填充服务(Android 8.0+)
从API 26开始,Android引入了自动填充框架,textNoSuggestions管不到这部分。给EditText加上android:importantForAutofill="no",直接告诉系统这个字段不需要自动填充:<EditText android:id="@+id/et_package_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="包裹名称" android:textNoSuggestions="true" android:importantForAutofill="no" />这个方案在高版本系统里几乎是百试百灵。
方案3:动态设置输入类型(代码层面)
有时候XML属性的优先级可能被系统覆盖,试试在Activity/Fragment的代码里动态设置:EditText packageNameEt = findViewById(R.id.et_package_name); packageNameEt.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_FILTER);或者配合设置自动填充提示为空:
packageNameEt.setAutofillHints("");方案4:彻底关闭EditText的自动填充
如果以上都没效果,试试给EditText设置android:autofillHints=""(空字符串),同时在代码里禁用自动填充服务的关联:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { packageNameEt.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO); }
一般来说,方案1和方案2组合起来就能解决你的问题了,我当时就是靠importantForAutofill="no"搞定的!
内容的提问来源于stack exchange,提问作者MichelReap




