Как изменить неактивный цвет обводки границы компонента Android Material TextInputLayout

Я пытаюсь настроить TextInputLayout не сфокусированный цвет обводки границы. К тому же, слишком много вопросов и ответов на них, и я попробовал их все. Например, создал стили и использовал их в качестве темы, создал селектор цвета и применил его, а также применил непосредственно app:boxStrokeColor с помощью селектора цвета. Но не повезло ни с одним из этих доступных решений.

Не уверен, где я делаю неправильно или чего-то еще не хватает. Я отправил свой код в Тестовый проект на github, чтобы лучше видеть всю мою настройку. Вот пример кода для быстрого ознакомления:

activity_main.xml ( TextInputLayout внутри ConstraintLayout)

<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>

styles.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>

Было бы здорово, если бы кто-то мог дать некоторые рекомендации и предложения и помочь мне понять любую ошибку, сделанную мной.

Заранее спасибо.


comment
Попытайся ! Возможно, этот ответ stackoverflow поможет... stackoverflow.com/a/52194924/12565133   -  person Rameez Khan    schedule 14.12.2020
comment
Я уже пробовал это, но не повезло с этим. Соответствующий коммит можно найти здесь: github.com/bipinvaylu/Test/commit/   -  person Bipin Vayalu    schedule 15.12.2020


Ответы (3)


Я протестировал ваш код, и он работает после внесения следующих изменений:

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. Затем измените файл res/values/styles.xml, указав ссылку boxStrokeColor на указанный выше селектор, как показано ниже:

<?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.Наконец в вашем TextInputLayout добавьте этот стиль, как показано ниже:

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

В настоящее время вы добавляете стиль, например: android:theme=@style/TextInputLayoutStyle вместо style=@style/TextInputLayoutStyle.

person MariosP    schedule 08.01.2021

Решение для этого следующее, и это работает, потому что я ТОЛЬКО СЕЙЧАС протестировал его.

Перейдите к своему colors.xml внутри папки res>values.

введите здесь описание изображения

Там у вас будет ваш colorPrimary и другие цвета, которые вы уже создали ранее. Прокрутите вниз и добавьте эту строку:

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">@color/colorPrimary</color>

Когда вы это сделаете, вы можете просто изменить цвет там. Я определил как @color/colorPrimary, но вы можете использовать все, что хотите. Перед применением этой строки я получил это:

введите здесь описание изображения

И после применения этой строки это результат:

введите здесь описание изображения

Также я применил style="@style/YourStyle" для TextInputLayout и TextInputEditText.

person SlothCoding    schedule 06.01.2021

Создайте цвет обводки блока для активного и неактивного состояния, как показано ниже: box_stroke_color

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#2C2C2C" android:state_focused="true"/>
    <item android:color="#2C2C2C" android:state_hovered="true"/>
    <item android:color="#D7D7D7"/>
</selector>

Создайте стиль TextInputLayout: TextInputLayoutStyle

 <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxStrokeColor">@color/box_stroke_color</item>
        <item name="boxStrokeWidth">1dp</item>
    </style>

Используйте в своем TextInputLayout

 <com.google.android.material.textfield.TextInputLayout
    style="@style/TextInputLayoutStyle" >
    <com.google.android.material.textfield.TextInputEditText.. />
 </com.google.android.material.textfield.TextInputLayout>
person Aslam Hossin    schedule 09.01.2021