Change TextInputLayout hint color programmatically
我试图以编程方式更改更改TextInputLayout提示颜色。
设置时
1 | android:textColorHint="@color/redColor" |
在xml中工作正常,我得到了这个:
1 | editext.setHintTextColor(getColor(R.color.redColor)) |
但这不适用于TextInputLayout的子级editext,因此即使TextInputLayout支持" android:textColorHint"属性,但它也不支持" setHintTextColor"方法,我寻找了不同的方法,并且发现有人建议使用" setHintTextAppearance"和预定义的样式,这就是我所做的,但是它给出了以下结果:
正常状态:
这是什么样的样式
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的配色