Как изменить цвет контура или границы textInputLayout не в фокусе?

Я пытаюсь изменить цвет контура или границы textInputLayout, я не знаю, почему он не меняется, я ищу и нахожу некоторые решения, но у меня не сработало.

здесь я помещаю стиль, а затем применяю его в textInputLayout

<style name = "WhiteOutlineBox" parent = "Widget.MaterialComponents.TextInputLayout.OutlineBox">
    <item name = "boxStrokeColor">@color/snow </item>
    <item name = "hintTextAppearance">@style/TextLabel</item>
    <item name = "android:textColorHint">@color/snow</item>
    <item name = "passwordToggleTint">@color/snow</item>

    <item name = "colorControlNormal">@color/snow</item>
    <item name = "colorControlActivated">@color/snow</item>
    <item name = "colorControlHighlight">@color/snow</item>
    <item name = "colorPrimary">@color/snow</item>
    <item name = "colorPrimaryDark">@color/snow</item>
    <item name = "colorAccent">@color/snow</item>

</style>

<!--  this style for the hint text lable in textInputLayout -->
<style name = "TextLabel" parent = "TextAppearance.Design.Hint">
    <item name = "android:textSize">12sp</item>
    <item name = "android:textColor">@color/snow</item>
</style>

здесь код его применения в textInputLayout в xml

<android.support.design.widget.TextInputLayout
            android:id = "@+id/ed_oldPass"
            style = "@style/WhiteOutlineBox"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:layout_marginStart = "32dp"
            android:layout_marginEnd = "32dp"
            android:layout_marginTop = "50dp"
            app:passwordToggleEnabled = "true">

            <android.support.design.widget.TextInputEditText
                style = "@style/WhiteOutlineBox"
                android:layout_width = "match_parent"
                android:layout_height = "56dp"
                android:background = "@color/snow"
                android:textColor = "@color/snow"
                android:layout_marginBottom = "10dp"
                android:hint = "@string/old_pass_ed_hint"
                android:inputType = "textPassword"
                android:paddingEnd = "10dp"
                android:paddingStart = "10dp" />
        </android.support.design.widget.TextInputLayout>

цвет обводки, hintTextAppearence, цвет подсказки и передача цвета оттенка измененный, но другие нет, я хочу изменить цвет границы, когда он не сфокусирован, как это сделать? пожалуйста, помогите и заранее спасибо

Лучший ответ, который я нашел до сих пор, -> stackoverflow.com/a/50818399/1177959

Sotti 01.09.2018 19:26

@Sotti, спасибо, это поможет, но если я хочу изменить это на некоторых страницах, как это сделать?

Rooh Al-mahaba 02.09.2018 13:08

Учитывая, что все очень взломано, я бы не знал, как это сделать. Я очень удивлен отсутствием базовой настройки TextInputLayout.

Sotti 03.09.2018 14:12
3
3
5 390
3

Ответы 3

добавьте это в свой color.xml

<color name = "mtrl_textinput_default_box_stroke_color">#BDC3C7</color>

он отменяет цвет несфокусированного контура по умолчанию

но весь textinputlayout меняется. Не для конкретной темы активности

ulaserdegor 06.08.2020 13:09

Существует проблема, если кто-то хочет изменить только один TextInputLayout программно, проблема в том, что свойство defaultStrokeColor недоступно, единственный способ изменить его - переопределить цвет mtrl_textinput_default_box_stroke_color или использовать цвет списка состояний, но в обоих случаях вам нужны стили на XML.

С другой стороны, свойство FocusStrokeColor доступно через setBoxStrokeColor, поэтому его можно изменить программно без какого-либо специального кода.

Решение для этого, если отражение - вариант для вас, конечно, состоит в том, чтобы изменить доступность свойства во время выполнения, следующий код выполняет работу с материалом-1.1.0:

fun TextInputLayout.setDefaultStrokeColor(
    color: Int
) {
    try {
        val defaultStrokeColor = TextInputLayout::class.java.getDeclaredField("defaultStrokeColor")
        defaultStrokeColor.isAccessible = true
        defaultStrokeColor.set(this, color)
    } catch (e: NoSuchFieldException) {
        // failed to change the color
    }
}

использует его как функция расширения:

yourView.setDefaultStrokeColor(yourColor)

Вы можете использовать атрибут boxStrokeColor, он может работать с селектором.

Используйте что-то вроде:

    <com.google.android.material.textfield.TextInputLayout
        app:boxStrokeColor = "@color/text_input_layout_stroke_color"
        ..>

или

<style name = "WhiteOutlineBox" parent = "Widget.MaterialComponents.TextInputLayout.OutlineBox">
    <item name = "boxStrokeColor">@color/text_input_layout_stroke_color</item>
</style>

с:

<selector xmlns:android = "http://schemas.android.com/apk/res/android">
  <item android:alpha = "..." android:color = "@color/...." android:state_focused = "true"/>
  <item android:alpha = "..." android:color = "@color/...." android:state_hovered = "true"/>
  <item android:alpha = "..." android:color = "@color/...." android:state_enabled = "false"/>
  <item android:alpha = "..." android:color = "@color/...."/>  <!-- unfocused -->
</selector>



Другие вопросы по теме