简书链接:android代码设置某个TextInputLayout禁用hintcolor颜色
文章字数:169,阅读全文大约需要1分钟
直接这样设置会发现没效果
textInputLayout.setHintTextColor(colorStateList);
因此用setDefaultHintTextColor

1
2
3
4
public static void setTextInputLayoutHintColor(TextInputLayout textInputLayout, ColorStateList colorStateList) {
textInputLayout.setDefaultHintTextColor(colorStateList);
textInputLayout.setHintTextColor(colorStateList);
}

生成ColorStateList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static ColorStateList getColorStateList(int pressColor, int focusedColor, int disableColor, int normalColor) {

// 定义状态集和对应的颜色值
int[][] states = new int[][]{
// 按下状态
new int[]{android.R.attr.state_pressed},
// 获取焦点状态
new int[]{android.R.attr.state_focused},
// 禁用状态
new int[]{-android.R.attr.state_enabled},
// 默认状态(未按下、未获取焦点且未禁用)
new int[]{}
};

int[] colors = new int[]{
// 对应按下状态的颜色
pressColor,
// 对应获取焦点状态的颜色
focusedColor,
// 对应禁用状态的颜色
disableColor,
// 对应默认状态的颜色
normalColor
};

ColorStateList colorStateList = new ColorStateList(states, colors);
return colorStateList;
}

或者

1
ColorStateList.valueOf(ContextCompat.getColor(context,R.color.your_color_name))

参考文章
关于android:以编程方式更改TextInputLayout提示颜色