Подтвердить что ты не робот

Изменение оттенка рисования в селекторе xml

У меня есть кнопка с фоном, определенным в xml. Я хотел бы поправить кнопку, основанную на текущем состоянии, в котором она находится, т.е. нажата, сфокусирована, нормальна.

Вот мой xml файл ниже. Кроме того, мои colored_tint_dark и colored_tint - это полупрозрачные цвета, которые я пытаюсь нарисовать над возвращаемым изображением, которое я вызываю из папки ресурсов. Вот проблема. Когда пользовательский интерфейс сначала загружается, изображение имеет соответствующий оттенок, но после нажатия, нажатое состояние не показывает никакого оттенка, тогда нормальное состояние не будет показывать никакого оттенка.

<?xml version="1.0" encoding="utf-8"?>

<item android:state_pressed="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            android:endColor="@color/colored_tint"
            android:startColor="@color/colored_tint"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item android:state_focused="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button">
    <shape>
        <gradient
            android:endColor="@color/colored_tint"
            android:startColor="@color/colored_tint"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

<item android:drawable="@drawable/rounded_grayscale_pinstripe_button">        
    <shape>
        <gradient
            android:endColor="@color/colored_tint_dark"
            android:startColor="@color/colored_tint_dark"
            android:angle="270" />
        <stroke
            android:width="0dp"
            android:color="@color/colored_tint_dark" />
        <corners
            android:radius="0dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

Я знаю, что в java есть решения, но я специально ищу решение в xml. Спасибо.

4b9b3361

Ответ 1

Создайте селектор tint_menu_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/white" android:state_pressed="true" />
    <item android:color="@color/white" android:state_activated="true" />
    <item android:color="@color/green" />
</selector>

(В моем примере изображение белого цвета, если оно выбрано, и зеленого цвета, если оно не выбрано)

Затем в вашем xml вы можете добавить атрибут tint к ImageView:

<ImageView
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:tint="@color/tint_menu_item"
    android:src="@drawable/ic_menu_home" />

Вы также можете использовать этот селектор в TextView, используя textColor attibute:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/tint_menu_item" />

Ответ 2

Вы пробовали с селектор?

Вы можете найти несколько примеров ЗДЕСЬ