更改TextInputLayout轮廓颜色(或如何替换主题/样式中的颜色)

时间:2018-06-19 12:36:41

标签: android xml material-design

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

在我的应用中声明此颜色:

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

这有效,但是会更改应用程序中所有TextInputLayout的线条颜色。如何在同一应用程序中将不同的颜色应用于不同的TextInputLayouts?

谢谢

2 个答案:

答案 0 :(得分:1)

好吧,您总是可以使用旧式反射,直到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");
}

答案 1 :(得分:0)

您可以在 res/color 下创建一个 xml 文件并像这样设置选择器。

printf("\n\nRemove characters in String Except Alphabets :\n");
printf("--------------------------------------------------\n");

printf("Input the string : ");
fgets(str, sizeof str, stdin);  
for (i = 0; str[i] != '\0'; ++i)
{
    while (!((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z' || str[i] == '\0')))
    {
        for (j = i; str[j] != '\0'; ++j)
        {
            str[j] = str[j + 1];
        }
        str[j] = '\0';
    }
    ch = islower(str[i]) ? toupper(str[i]) : tolower(str[i]);
    putchar(ch);
}

printf("After removing the Output String : %s\n\n", str);

TextInputLayout <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/color_id_when_focus" android:state_focused="true" /> <item android:color="@color/default_color_id" /> </selector> 的设置属性