以编程方式更改TextInputLayout强调颜色

use*_*644 11 android colors

我有一个包含EditText视图的简单TextInputLayout.

现在我想知道如何以编程方式更改强调颜色(下划线,突出显示时为hintTextColor).我似乎无法在TextInputLayout中找到合适的方法.

有什么建议?提前致谢.

Pet*_*aňa 17

IMHO InputTextLayout无法以编程方式更改标签颜色,因为它是由样式设置的.我检查了InputTextLayout的源代码并编写了这个hack helper方法,它创建了对私有颜色成员的访问:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

mFocusedTextColor用于设置内部CollapsingTextHelper.mCollapsedTextColor,用于设置标签的颜色.


小智 4

你可以尝试这个文本,

InputTextLayout.getEditText().setHighlightColor(yourColor);
InputTextLayout.getEditText().setHintTextColor(yourColor);
Run Code Online (Sandbox Code Playgroud)

这是 EditText 底部的行

Drawable background = InputTextLayout.getEditText().getBackground();
DrawableCompat.setTint(background, yourColor);
InputTextLayout.getEditText().setBackground(background);
Run Code Online (Sandbox Code Playgroud)

希望它有效!

  • @sud007 我也尝试了这个,我确认这不起作用。您可以尝试我的解决方案(我在这个问题中的答案),它对我有用。 (2认同)