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单独定义自定义样式避免全局主题影响:
- 在
styles.xml中新增自定义样式:
<style name="CustomOutlinedTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox"> <item name="endIconTint">@color/black</item> <item name="colorControlNormal">@color/black</item> </style>
- 将该样式设置给你的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
相关产品推荐
相关产品推荐

