Android:TextInputLayout - 自定义提示、底线和错误消息的颜色

Posted

技术标签:

【中文标题】Android:TextInputLayout - 自定义提示、底线和错误消息的颜色【英文标题】:Android: TextInputLayout - customize colors for hint, bottom line and error message 【发布时间】:2019-12-28 23:23:29 【问题描述】:

我的布局看起来像这样:

<LinearLayout
    android:layout_
    android:layout_
    android:orientation="vertical">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/email_container"
        android:layout_
        android:layout_>

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/email"
            android:layout_
            android:layout_
            android:hint="E-mail"
            android:imeOptions="actionDone"
            android:inputType="textEmailAddress"
            android:maxLines="1" />

    </com.google.android.material.textfield.TextInputLayout>

</LinearLayout>

当我验证用户输入时,如果输入无效,我会添加如下错误消息:

email_container.setError("You must fill this field!");

结果是:

如您所见,正如预期的那样,提示底线错误消息都是红色的.

我的目标

提示设置一个分隔颜色。那就是...保持红色 bottom linemessage,但在 错误状态hint 使用另一种颜色/strong>。


已经试过了:

How to change the floating hint color of TextInputLayout if EditText inside is disabled

https://***.com/a/53348723

https://***.com/a/46765159

https://***.com/a/33709380

...和其他解决方案试图解决android.support.design.widget.TextInputLayout 包装一个简单的EditText 时的情况。

但是,就我而言,我使用的是com.google.android.material.textfield.TextInputLayoutcom.google.android.material.textfield.TextInputEditText

我也试过在设置错误后调用setErrorTextColorsetDefaultHintTextColor

email_container.setError("You must fill this field!");
email_container.setErrorTextColor(new ColorStateList(states, colors));
email_container.setDefaultHintTextColor(new ColorStateList(statesHint, colorsHint));

// Also tried with other states, but nothing
int[][] states = new int[][] 
        new int[]  android.R.attr.state_enabled,
        new int[] -android.R.attr.state_enabled,
;

int[][] statesHint = new int[][] 
        new int[]  android.R.attr.state_enabled,
        new int[] -android.R.attr.state_enabled,
;


int[] colors = new int[] 
        R.color.yellow,
        R.color.green,
;


int[] colorsHint = new int[] 
        R.color.black90,
        R.color.bt_text_blue,
;

但我得到的唯一结果是,结合不同的状态,使 message 颜色不同,但 hint底线,还是一样的颜色。

有人知道怎么处理吗?

【问题讨论】:

【参考方案1】:

我们可以自定义样式来自定义 TextInputLayout 颜色。尝试使用此代码根据您的需要更改 TextInputLayout 颜色代码

style.xml

<style name="TextInputCustonColor" 
  parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <!-- The color of the label  -->
    <item name="android:textColorHint">@color/colorPrimaryGolden</item>
    <!-- The color of the label -->
    <item name="android:colorError" tools:targetApi="o">@color/colorError</item>
    <!--the color of text-->
    <item name="android:textColor">@color/colorPrimaryGolden</item>
    <!--the color of background-->
    <item name="boxBackgroundColor">@android:color/transparent</item>

</style>

activity.xml

    <android.support.design.widget.TextInputLayout
    android:layout_
    android:layout_
    card_view:errorEnabled="true"
    style="@style/TextInputCustonColor">

    <android.support.design.widget.TextInputEditText
        android:layout_
        android:layout_
        android:hint="Password"
        style="@style/TextInputCustonColor"
        android:imeOptions="actionDone"
        android:inputType="textEmailAddress"
        android:maxLines="1" />

</android.support.design.widget.TextInputLayout>

【讨论】:

以上是关于Android:TextInputLayout - 自定义提示、底线和错误消息的颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在新的 android 设计库中使用 TextInputLayout

Android:TextInputLayout - 自定义提示、底线和错误消息的颜色

如何在android中动态设置样式为TextInputLayout?

Android Material Design--TextInputLayout

Android - 如何更改 TextInputLayout(材料组件)中的文本颜色?

错误:膨胀类 com.google.android.material.textfield.TextInputLayout