Дизайн материала TextInputEditText Цвет границы, когда не активирован - PullRequest
0 голосов
/ 21 ноября 2018

Я размещаю виджет TextInputEditText на белом фоне.Когда фрагмент загружается впервые, виджет не имеет фокуса.Рамка вокруг виджета белая (или почти белая), поэтому она невидима на белом фоне.Вот снимок экрана этого виджета, нарисованный на черном фоне для контраста:

Как только я нажимаю на виджет, граница становится моей основной цвет, которыйэто именно то, что я хочу.Вот похожий скриншот после активации виджета.

Я пытаюсь управлять этими цветами с помощью стиля, и я перепробовал все, что мог придумать,но я не могу понять, как настроить этот цвет.Вот мой стиль (не стесняйтесь смеяться над различными попытками):

<style name="MyTextInputLayout" parent="Base.Widget.MaterialComponents.TextInputLayout">
    <item name="android:colorBackground">@android:color/black</item>
    <item name="android:textColorHint">@color/colorPrimary</item>
    <item name="android:paddingStart">16dp</item>
    <item name="android:paddingEnd">16dp</item>
    <item name="android:colorControlActivated">@android:color/black</item>
    <item name="android:colorControlNormal">@android:color/black</item>
    <item name="android:colorControlHighlight">@android:color/black</item>
    <item name="android:backgroundTint">@android:color/black</item>
    <item name="android:colorAccent">@android:color/black</item>
</style>

<style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText">
    <item name="android:textColor">@android:color/black</item>
    <item name="android:colorBackground">@android:color/black</item>
    <item name="android:colorControlActivated">@android:color/black</item>
    <item name="android:colorControlNormal">@android:color/black</item>
    <item name="android:colorControlHighlight">@android:color/black</item>
    <item name="android:backgroundTint">@android:color/black</item>
    <item name="android:colorAccent">@android:color/black</item>
</style>

И, наконец, xml макета на случай, если он будет полезен:

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginBottom="16dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    style="@style/MyTextInputLayout">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/reg_username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/username"
        style="@style/MyTextInputEditText"/>

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

Как я могуизменить этот цвет рамки, когда виджет не активен (т.е. не имеет фокуса)?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я решил это в два основных шага:

  1. Первая проблема, с которой я столкнулся, заключалась в том, что родительский стиль для моего стиля TextInputLayout необходимо было изменить на Widget.MaterialComponents.TextInputLayout.OutlinedBox.

  2. Как только я понял это, я проследил через Android XML для этого стиля и попал в файл с именем mtrl_box_stroke_color.xml.Это селектор, в котором объявляются три цвета для стандартной границы TextInputLayout.Этот файл выглядит следующим образом:

Поэтому я скопировал его и создал свой собственный файл в папке res / color, которую я назвал edit_text_box_border.xml.Я изменил три цвета в соответствии со своими целями, в конечном итоге придя к следующему:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="?attr/colorPrimary" android:state_focused="true"/>
    <item android:alpha="0.87" android:color="@color/colorPrimary" android:state_hovered="true"/>
    <item android:alpha="0.12" android:color="@color/colorPrimary" android:state_enabled="false"/>
    <item android:alpha="0.38" android:color="@color/colorPrimary"/>
</selector>

Затем, вернувшись к своему стилю, мне пришлось избавиться от моих многочисленных попыток цвета и добавить элемент для boxStrokeColor, который указывалв этот файл.Вот оба стиля:

<style name="MyTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="android:textColorHint">@color/colorPrimary</item>
        <item name="android:paddingStart">16dp</item>
        <item name="android:paddingEnd">16dp</item>
        <item name="boxStrokeColor">@color/edit_text_box_border</item>
    </style>

    <style name="MyTextInputEditText" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox.Dense">
        <item name="android:textColor">@android:color/black</item>
    </style>

Теперь, когда я запускаю приложение, я начинаю с этого:

enter image description here

Какойзатем превращается в это, когда я нажимаю на него:

enter image description here

Вот к чему я стремился, поэтому проблема решена.Надеюсь, это кому-нибудь поможет.

0 голосов
/ 21 ноября 2018

1.

<com.google.android.material.textfield.TextInputLayout
 ...
 style="@style/Widget.MaterialComponents.TextInputLayout.OutlineBox"
 app:boxStrokeColor = "@android:color/holo_purple"  
 //border color when in active status
 ...

2.добавьте следующее в файл colors.xml

<color name="mtrl_textinput_default_box_stroke_color">#00ff00</color> //border color when in inactive status

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...