Как я могу изменить цвет атрибута startIconDrawable TextInputLayout - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь изменить цвет атрибута startIconDrawable для TextInputLayout, когда состояние сфокусировано, но я не могу найти способ сделать это!

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/Login_Fragment_Email_Text_Input"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_marginStart="24dp"
    android:layout_marginTop="40dp"
    android:layout_marginEnd="24dp"
    android:background="@drawable/text_input_top_selector"
    android:paddingTop="8dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/Login_Fragment_Logo_Image"
    app:startIconDrawable="@drawable/profile"
    app:startIconTint="@drawable/icon_color_edit_text_selector">

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/Login_Fragment_Email_Edit_Text"
        android:focusableInTouchMode="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="-8dp"
        android:hint="@string/email"
        android:paddingBottom="16dp"
        android:theme="@style/CustomEditText" />

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

Я пытался сделатьэто путем создания icon_color_edit_text_selector.xml, который содержит следующие

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_focused="true"  />
    <item android:color="@color/iconColor" android:state_focused="false"/>
</selector>

, но показывает только цвет по умолчанию state_focused ="false"

1 Ответ

1 голос
/ 20 июня 2019

Вы можете использовать атрибут startIconTint:

https://developer.android.com/reference/com/google/android/material/textfield/TextInputLayout.html#attr_TextInputLayout_startIconTintили если вы хотите сделать это в коде, вы можете использовать setStartIconTintList:

https://developer.android.com/reference/com/google/android/material/textfield/TextInputLayout.html#setStartIconTintList(android.content.res.ColorStateList)

ОБНОВЛЕНИЕ Чтобы изменить цвет только в том случае, если редактируемый текст имеет фокус, вы должны добавить слушателя, находящегося в фокусе, к представлению, но тогда возникает проблема, поскольку макет ввода текста не фокусируется.Но вместо этого TextInputEditText получает фокус.Таким образом, вы должны добавить слушатель фокуса к экземпляру текстового ввода edittext вместо этого.Вот образец:

// You could simplify this with lambda's
// The variable names i used here matches the id's you have shown on your xml
edit1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        textInputLayout.setStartIconTintList(hasFocus ? ColorStateList.valueOf(Color.RED) : ColorStateList.valueOf(Color.BLUE));
    }
});
...