android - 更改 TextInputLayout 轮廓颜色(或如何覆盖主题/样式中的颜色)

标签 android xml material-design

之前我问过如何自定义 TextInputLayout 的轮廓颜色。您可以查看此LINK 中的问题.

在我的应用中声明这种颜色:

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">#fff</color>

这可行,但会更改应用中所有 TextInputLayout 的线条颜色。如何将不同的颜色应用到同一应用中的不同 TextInputLayouts?

谢谢

最佳答案

好吧,在 Google 弄清楚我们如何访问像这样的简单且相当基本的东西之前,您始终可以使用旧的反射。 TextInputLayout 类中的字段称为 defaultStrokeColor,因此如果您将其设置为可访问并更改值,那么在现实世界中它也应该更改。

try {
    Field field = TextInputLayout.class.getDeclaredField("defaultStrokeColor");
    field.setAccessible(true);
    field.set(commentInputLayout,
        ContextCompat.getColor(itemView.getContext(), R.color.app_middleweight));
}
catch (NoSuchFieldException | IllegalAccessException e) {
    Log.w("TAG", "Failed to change box color, item might look wrong");
}

关于android - 更改 TextInputLayout 轮廓颜色(或如何覆盖主题/样式中的颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50928644/

相关文章:

android - Home 键锁定时键盘不工作

java - XPath XML 命名空间问题

android - 状态栏不是透明的而是白色的

适用于 Pre-Lollipop 设备的具有弯曲背景的 Android Ripple 按钮

android - 漏洞 : Slider Appearing Every time using viewpager

android - 如何使用字符串作为代码?

java - 从线性布局拍摄照片并保存到图库

XML 中的 Java 变量

python - 有没有读取ms office文件底层xml的python包?

angularjs - 如何使用Angular-Material获得全高sidenav