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 line 和 message,但在 错误状态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.TextInputLayout
和com.google.android.material.textfield.TextInputEditText
。
我也试过在设置错误后调用setErrorTextColor
和setDefaultHintTextColor
:
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