首页 > 解决方案 > 是否可以在不使用主题的情况下以编程方式更改 TextInputLayout 颜色?

问题描述

我现在在我的主题中使用它我想知道是否可能不使用主题以编程方式更改 textinputlayout 的颜色,或者我仍然可以在不使用主题的情况下更改 xml,因为我需要动态获取颜色并为此编写代码或在 xml 中进行数据绑定.

        <item name="colorControlActivated">@color/primaryTextColor</item>
        <item name="android:textColorHint">@color/primaryTextColor</item>
        <item name="android:textColor">@color/primaryTextColor</item>
        <item name="android:editTextColor">@color/primaryTextColor</item>```

标签: androidandroid-textinputlayout

解决方案


是的,我们可以使用 setBackgroundColor()。

但在你的情况下,我认为你需要建立自己的风格,这里有一个例子:

创建 TextInputLayout 主题 让我们定义几个将用作主题一部分的文本样式。这些样式对应于使用的不同文本,例如提示和错误文本。

<style name="ErrorText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@android:color/red</item>
    <item name="android:textSize">16sp</item>
</style>

<style name="HintText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textSize">14sp</item>
</style>

然后,我们创建我们的 TextInputLayout 主题,参考上面的内容:

<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
    <!-- reference our hint & error styles -->
    <item name="hintTextAppearance">@style/HintText</item>
    <item name="errorTextAppearance">@style/ErrorText</item>
    <item name="android:textColor">@color/user_input_color</item>
    <item name="android:textColorHint">@color/unfocused_color</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/blue</item>
    <item name="colorControlHighlight">@color/green</item>
</style>

最后一步,我们使用 android:theme 属性和我们上面定义的样式构建我们的 layout.xml:

<android.support.design.widget.TextInputLayout
    android:theme="@style/TextInputLayoutAppearance"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

     <android.support.design.widget.TextInputEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:hint="@string/hint_email"/>

</android.support.design.widget.TextInputLayout>

推荐阅读