Любая причина, по которой `TextInputLayout` будет использовать цвета стиля для рисования курсора, но не для подчеркивания?

Я пытаюсь установить цвет подчеркивания TextInputEditText в TextInputLayout. При установке colorControlActivated на желаемый цвет курсор меняет цвет, но подчеркивание не реагирует.

Я пытался:

  • Создание стиля с определенными colorControlHighlight, colorControlNormal и colorControlActivated. Настройка тем виджета как в файле макета, так и в манифесте.
  • Установка фона поля ввода для рисования с подчеркиванием, нарисованным вручную.

Вот стиль, определенный в values/themes.xml:

<style name="AppTheme.DetailItem" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    <item name="android:colorControlNormal">#ff0000</item>
    <item name="android:colorControlHighlight">#0000ff</item>
    <item name="android:colorControlActivated">#ff00ff</item>
</style>

И тема применена:

<com.google.android.material.textfield.TextInputLayout
    android:theme="@style/AppTheme.DetailItem"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:errorEnabled="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/value"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:enabled="false"
        android:maxLines="1"
        android:textAppearance="?textAppearanceBody2"
        tools:text="Name" />
</com.google.android.material.textfield.TextInputLayout>

Я ожидаю, что подчеркивание TextInputEditText изменит цвет на colorControlActivated, когда он сфокусирован, и на colorControlNormal, когда он не сфокусирован. Однако, несмотря ни на что, цвет подчеркивания остается черным, когда он не сфокусирован, и colorPrimary, когда он сфокусирован. Однако курсор меняется на colorControlActivated, когда поле сфокусировано, поэтому виджет распознает определенный мной стиль, но не использует цвета стиля для рисования подчеркивания.




Ответы (1)


Поскольку вы используете FilledBox, цвет подчеркивания определяется атрибутом boxStrokeColor.

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

<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="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>

Вы можете установить собственный селектор или переопределить цвет colorOnSurface и colorPrimary с помощью

<com.google.android.material.textfield.TextInputLayout
    android:theme="@style/AppTheme.DetailItem"
    ...>

куда:

  <style name="AppTheme.DetailItem">
    <item name="colorOnSurface">@color/...</item>
    <item name="colorPrimary">@color/....</item>
    ....
  </style>

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

person Gabriele Mariotti    schedule 15.10.2019
comment
Спасибо за ваш ответ. При настройке boxStrokeColor для пользовательского селектора или даже просто цвета я не вижу изменений. Я вижу изменение при использовании colorOnSurface, однако это также меняет цвет метки. - person canons; 16.10.2019
comment
Кажется, я не могу взаимодействовать ни с одним из атрибутов цветовой темы TextInputLayout. Единственный раз, когда я видел изменения, связанные с цветами TextInputLayout, это при установке цвета, такого как colorOnSurface, из которого берутся атрибуты темы по умолчанию (например, в упомянутом вами селекторе по умолчанию boxStrokeColor) - person canons; 16.10.2019
comment
Вы используете версию 1.1.0-beta01? - person Gabriele Mariotti; 16.10.2019
comment
После обновления до 1.1.0-beta01 я все еще вижу проблему - person canons; 16.10.2019
comment
Довольно странно. Используя атрибуты в макете, у вас не должно возникнуть проблем с темой или цветами. - person Gabriele Mariotti; 16.10.2019
comment
Согласен, странно. Спасибо за вашу помощь. Я обновлю, если когда-нибудь выясню, что не так. - person canons; 16.10.2019