You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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配置:

  1. 把原本给TextInputLayout设置的style="@style/text_material_input_hint_neutral_80_normal"移到app:hintTextAppearance属性,该样式是文本外观配置,不能直接作为TextInputLayout的根样式
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:07