以编程方式更改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“具有预定义的样式,以及我所做的,但它给出了以下结果:
这是什么样的风格
<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提示颜色的主要内容,如果未能解决你的问题,请参考以下文章