【发布时间】:2015-09-07 14:17:15
【问题描述】:
我有一个包含 EditText 视图的简单 TextInputLayout。
现在我想知道如何以编程方式更改强调色(下划线、突出显示时的hintTextColor)。 我似乎在 TextInputLayout 中找不到合适的方法。
有什么建议吗?提前致谢。
【问题讨论】:
我有一个包含 EditText 视图的简单 TextInputLayout。
现在我想知道如何以编程方式更改强调色(下划线、突出显示时的hintTextColor)。 我似乎在 TextInputLayout 中找不到合适的方法。
有什么建议吗?提前致谢。
【问题讨论】:
恕我直言 InputTextLayout 不能以编程方式更改标签颜色,因为它是由样式设置的。我检查了 InputTextLayout 的源代码并编写了这个创建对私有颜色成员的访问的 hack 辅助方法:
public static void setInputTextLayoutColor(EditText editText, @ColorInt int color) {
TextInputLayout til = (TextInputLayout) editText.getParent();
try {
Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor");
fDefaultTextColor.setAccessible(true);
fDefaultTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color }));
Field fFocusedTextColor = TextInputLayout.class.getDeclaredField("mFocusedTextColor");
fFocusedTextColor.setAccessible(true);
fFocusedTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{ color }));
} catch (Exception e) {
e.printStackTrace();
}
}
mFocusedTextColor 用于设置内部 CollapsingTextHelper.mCollapsedTextColor 设置标签颜色。
【讨论】:
你可以试试这个文字,
InputTextLayout.getEditText().setHighlightColor(yourColor);
InputTextLayout.getEditText().setHintTextColor(yourColor);
这用于 EditText 底部的行
Drawable background = InputTextLayout.getEditText().getBackground();
DrawableCompat.setTint(background, yourColor);
InputTextLayout.getEditText().setBackground(background);
希望它有效!
【讨论】: