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

时间:2018-05-24 09:38:54

标签: android android-layout user-interface android-textinputlayout

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

 android:textColorHint="@color/redColor"
xml中的

工作正常,我得到了这个: 在编辑的同时 这就是我想要的,但我需要动态设置

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

3 个答案:

答案 0 :(得分:0)

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

[Change TextInputLayout accent color programmatically

答案 1 :(得分:0)

我找到了此更改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提供所需的下划线颜色。

答案 2 :(得分:0)

我一直在寻找解决方案。 但是终于找到了! 事实证明太容易了

科特林版本:

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

最后:

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