首页 > 解决方案 > 如何更改Android Material TextInputLayout组件的非活动边框笔触颜色

问题描述

我正在尝试设置 TextInputLayout 不聚焦的边框笔触颜色。同样,有太多的问题和答案,我都试过了。就像创建样式并用作主题一样,创建颜色选择器并应用它,也可以直接应用 app:boxStrokeColor 和颜色选择器。但这些可用的解决方案都不行。

不知道,我在哪里做错了或者我仍然缺少什么。我将我的代码推送到了 github 的测试项目,以便更好地了解我的整个设置。以下是一些示例代码以供快速查看:

activity_main.xml(ConstraintLayout 内的 TextInputLayout)

<com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <!-- Tried this as well - app:boxStrokeColor="@color/text_input_box_stroke_color" -->
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/emailTextInputLayout"
        android:hint="Email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:theme="@style/TextInputLayoutStyle"
        android:layout_marginHorizontal="24dp"
        app:layout_constraintTop_toBottomOf="@id/toolbar"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/emailTextInput"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:importantForAutofill="no"
            android:inputType="textEmailAddress" />

    </com.google.android.material.textfield.TextInputLayout>

样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">#FF00CC</item>
        <item name="boxStrokeWidth">2dp</item>
    </style>
</resources>

text_input_box_stroke_color.xml(颜色选择器)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/mtrl_textinput_focused_box_stroke_color" android:state_focused="true"/>
    <item android:color="@color/mtrl_textinput_hovered_box_stroke_color" android:state_hovered="true"/>
    <item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false"/>
    <item android:color="@color/mtrl_textinput_default_box_stroke_color"/>
</selector>

如果有人可以提供一些指导和建议并帮助我找出我犯的任何错误,那将是很大的帮助。

提前致谢。

标签: androidmaterial-components-androidandroid-textinputlayoutandroid-textinputedittext

解决方案


我已经测试了您的代码,并且在您进行以下更改后它可以工作:

1.首先更改您的res/color/text_input_box_stroke_color.xml如下所示,以查看不同的状态颜色。在下面的示例中,我为聚焦状态设置了红色,为默认非活动状态设置了浅蓝色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/holo_red_dark" android:state_focused="true" />
    <item android:color="@android:color/holo_green_dark" android:state_hovered="true" />
    <item android:color="@color/mtrl_textinput_disabled_color" android:state_enabled="false" />
    <item android:color="@android:color/holo_blue_light" />
</selector>

2.然后使用链接到上述选择器的boxStrokeColor更改res/values/styles.xml,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
        <item name="boxStrokeColor">@color/text_input_box_stroke_color</item>
        <item name="boxStrokeWidth">2dp</item>
    </style>
</resources>

3.Finally 在您的TextInputLayout中添加如下样式:

<com.google.android.material.textfield.TextInputLayout
    style="@style/TextInputLayoutStyle"
    android:id="@+id/emailTextInputLayout"

目前您添加的样式如下:android:theme="@style/TextInputLayoutStyle"而不是style="@style/TextInputLayoutStyle"


推荐阅读