You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android中如何阻止EditText自动联想谷歌账户名称?

解决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

火山引擎 最新活动