You need to enable JavaScript to run this app. TextInputLayout的endIconTint属性不生效,密码切换图标始终为白色
优惠活动
大模型
产品
解决方案
定价
更多

TextInputLayout的endIconTint属性不生效,密码切换图标始终为白色

TextInputLayout 密码切换图标色调不生效解决方案

问题根因

该问题并非组件本身的Bug,是新旧API混用导致的样式覆盖冲突:
你在布局中同时声明了app:passwordToggleEnabled="true"和app:endIconMode="password_toggle"两个属性。其中passwordToggleEnabled是Material组件早期版本提供的密码切换控制API,优先级高于后续推出的通用endIcon系列配置,会强制使用默认白色图标色调,直接覆盖你设置的endIconTint属性值。

解决方案

方案1(优先推荐)

直接删除布局中app:passwordToggleEnabled="true"这行配置即可。app:endIconMode="password_toggle"已经默认开启密码切换功能,移除过时API配置后,你设置的endIconTint就会正常生效。

方案2(主题冲突场景)

如果修改后仍不生效,检查你的App全局主题中colorControlNormal属性是否被设置为白色,该属性会默认覆盖组件图标色调。你可以为TextInputLayout单独定义自定义样式避免全局主题影响:

  1. 在styles.xml中新增自定义样式:
<style name="CustomOutlinedTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="endIconTint">@color/black</item>
    <item name="colorControlNormal">@color/black</item>
</style>
  1. 将该样式设置给你的TextInputLayout即可:
<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/password_til"
    style="@style/CustomOutlinedTextInputLayout"
    ...其余配置保持不变>

方案3(动态兜底)

如果上述方案都不生效,可以用代码动态设置图标色调:

Kotlin 示例

val passwordTil = findViewById<TextInputLayout>(R.id.password_til)
passwordTil.setEndIconTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.black)))

Java 示例

TextInputLayout passwordTil = findViewById(R.id.password_til);
passwordTil.setEndIconTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.black)));

内容的提问来源于stack exchange,提问作者Inzimam Tariq IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 20:24:03