Изменение оттенка рисования в селекторе 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. Спасибо.
Ответы
Ответ 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
Вы пробовали с селектор?
Вы можете найти несколько примеров ЗДЕСЬ