我正在尝试以编程方式更改TextInputLayout提示颜色。 设置时
android:textColorHint="@color/redColor"
xml中的工作正常,我得到了这个: 在编辑的同时 这就是我想要的,但我需要动态设置
现在我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”属性行为?
答案 0 :(得分:0)
请检查以下链接。希望它可以帮助你提出一些想法。
答案 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)