关于android:以编程方式更改TextInputLayout提示颜色

Change TextInputLayout hint color programmatically

我试图以编程方式更改更改TextInputLayout提示颜色。
设置时

1
 android:textColorHint="@color/redColor"

在xml中工作正常,我得到了这个:><br />
而在编辑<img src=

1
editext.setHintTextColor(getColor(R.color.redColor))

但这不适用于TextInputLayout的子级editext,因此即使TextInputLayout支持" android:textColorHint"属性,但它也不支持" setHintTextColor"方法,我寻找了不同的方法,并且发现有人建议使用" setHintTextAppearance"和预定义的样式,这就是我所做的,但是它给出了以下结果:

正常状态:><br />
聚焦状态:<img src=

这是什么样的样式

1
2
3
4
5
<style name="AppRedText" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/redColor</item>
    <item name="android:textColorHint">@color/redColor</item>
    <item name="android:textSize">12sp</item>
</style>

如何以编程方式实现" android:textColorHint"属性行为?


我一直在寻找解决方案很长时间。
但是终于找到了!
原来太容易了)

Kotlin版本:

1
2
3
private fun setTextInputLayoutHintColor(textInputLayout: TextInputLayout, context: Context, @ColorRes colorIdRes: Int) {
    textInputLayout.defaultHintTextColor = ColorStateList.valueOf(ContextCompat.getColor(context, colorIdRes))
}

最后:

1
setTextInputLayoutHintColor(textInputLayout, context, R.color.errorColor)


我已找到此更改TextInputLayout提示文本颜色的解决方案。

你可以这样使用:

1
setUpperHintColor(ContextCompat.getColor(context,R.color.your_color_name));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void setUpperHintColor(int color) {
        try {
            Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor");
            field.setAccessible(true);
            int[][] states = new int[][]{
                    new int[]{}
            };
            int[] colors = new int[]{
                    color
            };
            ColorStateList myList = new ColorStateList(states, colors);
            field.set(textInputLayout, myList);

            Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class);
            method.setAccessible(true);
            method.invoke(textInputLayout, true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

并且您需要将EditText上的backgroundTintList(或supportBackgroundTintList)设置为ColorStateList的实例,该实例仅包含您希望将色调更改为的颜色。 一种向后兼容的简单方法如下所示:

1
2
ColorStateList colorStateList = ColorStateList.valueOf(ContextCompat.getColor(context,R.color.your_color_name))
editText.setSupportBackgroundTintList(colorStateList)

这将为EditText提供所需的下划线颜色。


请检查以下链接。 希望它可以帮助您提出一些想法。

[以编程方式更改TextInputLayout的配色