#android #android-layout
#Android #android-макет
Вопрос:
В настоящее время у меня есть набор переключателей, заключенных в радиогруппу, при этом каждая кнопка ссылается на селектор, который изменяет цвет состояния кнопки, и пишет код для реализации поведения в виде радиокнопки. Это отлично работает. (РЕДАКТИРОВАТЬ: я должен упомянуть, что селектор — это то, на что ссылается элемент android: background кнопки)
Селектор выглядит примерно так
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/gold"
android:state_checked="true" />
<item android:drawable="@color/white" />
</selector>
Теперь я хочу, чтобы второй набор кнопок имел точно такое же поведение. Загвоздка в том, что на этот раз мне нужны изображения на некоторых из них, а не текст.
Есть много сообщений StackOverflow о том, как изменить изображение в зависимости от состояния кнопки, но я не хочу менять изображение в зависимости от состояния. Я хочу изменить цвет кнопки в зависимости от состояния (изображения имеют прозрачный фон).
Я действительно пытаюсь избежать изменения самих изображений кнопок.
Я считаю, что решение включает в себя создание селектора со списком слоев, но для меня это новая территория.
Ответ №1:
Создайте XML-файл с именем colors.xml в папке res/values:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="green">#00ff00</color>
</resources>
В папке с возможностью рисования создайте XML-файл my_btn_toggle.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@color/red" />
<item android:state_checked="true" android:drawable="@color/green" />
</selector>
и в разделе xml определите свою кнопку переключения:
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@ id/btntoggle"
android:background="@drawable/my_btn_toggle"/>
Комментарии:
1. Это именно то, что я сейчас делаю с переключателями. Что мне нужно знать, так это то, где мне указать изображение, которое будет использоваться для кнопки? В настоящее время кнопки изображений ссылаются на них с помощью android: background. Если я отсылаю android: background к селектору, этот селектор должен каким-то образом сохранить ссылку на файл изображения … (и это мой вопрос … как мне это сделать?)
2. <xmlns селектора: android=» schemas.android.com/apk/res/android «> <элемент android:state_checked=»false» android:drawable=»@drawable/yourImagechecked» /> <элемент android:state_checked=»true» android: drawable=»@drawable/yourImagechecked» /> </селектор>
Ответ №2:
Я думаю, вы ищете атрибуты тонировки, упомянутые здесь.
В вашем случае попробуйте установить для android:tint
ColoStateList значение attribute. В ColorStateList
документе у вас есть пример, который показывает селектор цвета, подобный селектору для рисования, но для цветов.
(Я не уверен, что он уже поддерживает устройства до Lollipop, или вы должны сделать это программно с помощью фильтров PorterDuff для более старых версий.)
Комментарии:
1. Это было близко. Я не хотел, чтобы изображение смешивалось (тонировалось) с цветом оттенка. Вы даже можете указать метод наложения с помощью android: tintMode. Метод, на который я ответил, создает многоуровневый рисунок, где самый верхний слой — это то, что вы видите там, где оно написано. С тех пор я изменил его, чтобы создавать границы, используя <stroke>
Ответ №3:
Что, по-видимому, нужно сделать, так это создать многоуровневый рисунок в селекторе, подобный этому:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item android:drawable="@color/gold"
android:gravity="fill"/>
<item android:drawable="@drawable/image"
android:gravity="fill"/>
</layer-list>
</item>
<item android:state_checked="false">
<layer-list>
<item android:drawable="@color/white"
android:gravity="fill"/>
<item android:drawable="@drawable/image"
android:gravity="fill"/>
</layer-list>
</item>
</selector>
Стандартный подход к селекторам кнопок с переменным состоянием — это то, о чем упоминал Приянк выше. Просто изображение должно быть прозрачным и объявлено, как указано выше, таким образом, чтобы оно было покрыто фоновым цветом для изменения состояния цвета