如何修改EditText为空且未聚焦时TextInputLayout的提示文字颜色
解决方案
步骤1:创建hint颜色状态选择器
在res/color目录下新建hint_text_color.xml(如果没有color目录先手动创建),内容如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 输入框聚焦时的hint颜色(上浮状态) --> <item android:color="@color/secondary_80" android:state_focused="true" /> <!-- 输入框有内容时的上浮hint颜色 --> <item android:color="@color/neutral_80" android:state_enabled="true" /> <!-- 输入框为空且未聚焦时的默认hint颜色(显示在输入框内部) --> <item android:color="@color/替换为你需要的目标颜色" /> </selector>
步骤2:调整布局属性
修改你的TextInputLayout和TextInputEditText配置:
- 把原本给TextInputLayout设置的
style="@style/text_material_input_hint_neutral_80_normal"移到app:hintTextAppearance属性,该样式是文本外观配置,不能直接作为TextInputLayout的根样式 - TextInputLayout和EditText都要引用刚才创建的颜色选择器作为hint颜色
修改后的布局核心代码如下:
<com.google.android.material.textfield.TextInputLayout android:id="@+id/input_layout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="17dp" android:layout_marginTop="26dp" android:layout_marginEnd="17dp" android:layout_marginBottom="24dp" android:hint="@string/store_url" android:textColorHint="@color/hint_text_color" app:hintTextAppearance="@style/text_material_input_hint_neutral_80_normal" app:hintTextColor="@color/hint_text_color" app:boxBackgroundColor="@color/neutral_10" app:boxCornerRadiusBottomEnd="8dp" app:boxCornerRadiusBottomStart="8dp" app:boxCornerRadiusTopEnd="8dp" app:boxCornerRadiusTopStart="8dp" app:boxStrokeWidth="0dp" app:boxStrokeWidthFocused="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/edittext" style="@style/text_material_input_text_neutral_130_normal" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:text="test string" android:paddingStart="12dp" android:paddingTop="24dp" android:textAlignment="viewStart" android:textColorHint="@color/hint_text_color"/> </com.google.android.material.textfield.TextInputLayout>
可选:动态控制颜色
如果需要更灵活的逻辑控制,可以在代码里添加焦点监听实现效果:
edittext.setOnFocusChangeListener { _, hasFocus -> val targetColor = if (!hasFocus && edittext.text.isNullOrEmpty()) { ContextCompat.getColor(this, R.color.你要的未聚焦空状态颜色) } else { ContextCompat.getColor(this, R.color.neutral_80) } input_layout.hintTextColor = ColorStateList.valueOf(targetColor) edittext.setHintTextColor(targetColor) }
不生效原因说明
app:hintTextColor仅控制hint上浮后的颜色,未聚焦且为空时hint显示在EditText内部,由EditText的android:textColorHint控制- 你之前将文本外观样式直接赋值给TextInputLayout的根style,类型不匹配,无法生效
内容的提问来源于stack exchange,提问作者Amin
相关产品推荐
相关产品推荐

