изменить boxBackgroundColor TextInputLayout для android.support.design.widget - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу динамически изменить boxBackgroundColor TextInputLayout, когда editText.setEnables(false).Я пытался сделать это через res / color / selector_input_background_color, но это не сработало.Также TextInputLayout (android.support.design.widget.TextInputLayout) не имеет такого параметра как boxBackgroundColor!; (- это ТОЛЬКО предустановка в библиотеке AndroidX (com.google.android.material.textfield.TextInputLayout), к которой я боюсь перейти прямо сейчас. (Старый проект)

вот как выглядит мой макет

<android.support.design.widget.TextInputLayout
        [...]
        android:theme="@style/TextInputLayoutTheme"
        style="@style/TextInputLayoutStyle">

        <android.support.design.widget.TextInputEditText
             [...]
             />

</android.support.design.widget.TextInputLayout>

TIL наследует стили от нового MaterialDesign

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
    <item name="boxBackgroundColor">@color/selector_input_background_color</item>
</style>

И в зависимости от состояния я предоставлял селектор внутри res / color

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="#00FF00"/>
    <item android:color="@color/editTextBackground"/>
</selector>

Боюсь, что это ошибка, потому что Google обещаетсохранить совместимость с версией библиотеки поддержки 28.0.0 и AndroidX. Что забавно, даже если TextInputLayout не имеет метода, такого как .setBoxBackgroundColor, он работает внутри стиля - но селектор не имеет.

Я подозреваю, что из-за этого пробела, даже если у меня есть селектор boxBackgroundColor, он не вызывается при изменении EditText state:enabled, потому что TextInputLayout не знает этот параметр - однако он каким-то волшебным образом используется в начале, когда загружается макет.

1 Ответ

0 голосов
/ 31 октября 2018

В настоящее время существует только обходной путь для этого.

Вы можете использовать библиотеку support , если хотите постоянно сохранять один и тот же цвет блока.

<style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
    <item name="boxBackgroundColor">@color/selector_input_background_color</item>
</style>

Однако, если вы хотите изменить его цвет (например, это означает, что поле отключено), вы должны изменить его программно.Но есть одна загвоздка.Вы должны переключиться на androidX , потому что в android.support отсутствует этот метод.

Так что вам нужно сделать

textInputLayoutPhone.setBoxBackgroundColorResource(R.color.editTextDisableBackground);
...