以编程方式更改TextInputLayout提示颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式更改TextInputLayout提示颜色相关的知识,希望对你有一定的参考价值。

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

 android:textColorHint="@color/redColor"

在xml工作得很好,我得到这个:和editiing,这就是我想要的,但我需要动态设置它

现在我TextInputLayout没有setHintTextColor方法,但是TextInputEditText这样做我尝试这样做:

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

但这不适用于edditext,它是TextInputLayout的子项,所以即使TextInputLayout支持“android:textColorHint”属性,它也不支持“setHintTextColor”方法,我寻找方法以不同的方式进行,我发现人们建议使用“ setHintTextAppearance“具有预定义的样式,以及我所做的,但它给出了以下结果:

正常状态:聚焦状态:enter image description here

这是什么样的风格

<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”属性行为?

答案

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

[Change TextInputLayout accent color programmatically

另一答案

我找到了这个更改TextInputLayout提示文本颜色的解决方案。

你可以使用像:

setUpperHintColor(ContextCompat.getColor(context,R.color.your_color_name));

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的实例,该实例仅包含您要将颜色更改为的颜色。以向后兼容的方式执行此操作的简单方法如下所示:

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

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

以上是关于以编程方式更改TextInputLayout提示颜色的主要内容,如果未能解决你的问题,请参考以下文章

更改 TextInputLayout 提示行为

以编程方式添加TextInputLayout

更改 TextInputLayout 仅提示文本样式

调用 recreate() 方法时 TextInputLayout 提示不会刷新

如何更改 TextInputLayout 的提示大小

如何在空的edittext上更改材质TextInputLayout提示颜色?