Цвет подчеркивания TextInputLayout не адаптируется к пользовательскому цвету при фокусировке - PullRequest
1 голос
/ 08 октября 2019

Не уверен, что мне не хватает, но каждый раз, когда edittext фокусируется, цвет подчеркивания не адаптируется к заданному мной цвету. Для справки вот мой код темы

<style name="EditTextHintWhite" parent="@style/AppTheme">
   <item name="color">@color/white</item>
   <item name="android:textColorHint">@color/white</item>
   <item name="colorControlNormal">@color/white</item>
   <item name="colorControlActivated">@color/white</item>
   <item name="colorError">@color/white</item>
</style>

Как вы можете видеть, я установил все из них на белый, но каким-то образом, когда edittext фокусируется, подчеркивание становится зеленым

enter image description here

Вот мой код из макета

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/EditTextHintWhite">

        <androidx.appcompat.widget.AppCompatEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:shadowColor="@color/white"
            android:singleLine="true"
            android:textColor="@color/white"
            app:backgroundTint="@color/white" />

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

1 Ответ

0 голосов
/ 08 октября 2019

Цвет подчеркивания со стилем FilledBox определяется атрибутом boxStrokeColor. Вы можете добавить его в свой макет или в свой собственный стиль. Примерно так:

<style name="...." parent="Widget.MaterialComponents.TextInputLayout.FilledBox" >
    <!-- underline color in FilledBox style -->
    <item name="boxStrokeColor">@color/custom_selector_filled_stroke_color</item>
    ....
</style>

Это значение по умолчанию для селектора:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorPrimary" android:state_focused="true"/>
  <!-- 4% overlay over 42% colorOnSurface -->
  <item android:alpha="0.46" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.42" android:color="?attr/colorOnSurface"/>
</selector>

Цвет, используемый при фокусировке, - это первая строка <item android:color="?attr/colorPrimary" android:state_focused="true"/>

enter image description here

В вашем коде используйте (удалите app:backgroundTint в EditText)

    <com.google.android.material.textfield.TextInputLayout
        android:hint="@string/email"
        android:theme="@style/EditTextHintWhite"
        ..>

        <com.google.android.material.textfield.TextInputEditText
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:textColor="@color/white"
            ../>

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

с (удалите родительский элемент):

  <style name="EditTextHintWhite">
    <item name="colorError">@color/white</item>
    <item name="colorPrimary">@color/...</item>
    <item name="colorOnSurface">@color/...</item>
  </style>

Если вы хотите, чтобы пользовательское подчеркивание использовало атрибут app:boxStrokeColor="@color/text_input_layout_stroke_color" в вашем TextInputLayout.

Примечание: используйте com.google.android.material.textfield.TextInputEditText вместо androidx.appcompat.widget.AppCompatEditText.

...