- Абсолютно.Как я уже упоминал в комментариях, либо убедитесь, что у вашего рисованного элемента есть прозрачный фон, либо создайте пользовательскую кнопку для маскировки рисованного элемента.
- Вы захотите использовать стиль Атрибут применять разные стили для каждой кнопки.Под этим я подразумеваю, что цвет, определенный в вашем
custom_button.xml
, должен ссылаться на атрибут цвета (что-то вроде colorAccent
должно работать в вашем случае), а не на статический цвет.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="?attr/colorAccent"/>
</shape>
Затем изменитеэтот цвет в стилях кнопок вместо android:color
.
<style name="CategoryToggle">
<item name="colorAccent">@color/YellowPrimary</item>
</style>
Убедитесь, что у вас добавлена поддержка библиотеки поддержки , иначе colorAccent
будет недоступен.
Используйте атрибут android:theme
вместо атрибута style
, чтобы применить тему кнопки.
<Button
android:width="wrap_content"
android:height="wrap_content"
android:theme="@style/CategoryToggle"/>
Похоже, ваши рисованные объекты не используют
квалификаторов ресурсов .Вам нужно убедиться, что каждый альтернативный ресурс имеет то же имя, что и оригинал (т. Е. Ваш
icon_48mdpi.png
должен вместо этого называться
icon_48dp.png
для всех конфигураций) и помещен в соответствующую папку для рисования для его плотности.Ваши ресурсы для рисования должны выглядеть следующим образом (в структуре представления
Project
, а не в структуре представления
Android
).
res/
|-- drawable/
| +-- custom_button.xml
|-- drawable-hdpi/
| +-- icon_48dp.png
|-- drawable-mdpi/
| +-- icon_48dp.png
|-- drawable-xhdpi/
| +-- icon_48dp.png
|-- drawable-xxhdpi/
| +-- icon_48dp.png
|-- drawable-xxxhpdi/
| +-- icon_48dp.png
~
Чтобы изменить цвет рисунка в зависимости от состояния, вам нужно сделать абстракцию цвета еще на один шаг и создать
список состояний цвета .
res/color/button_color_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/pressed_color" android:state_pressed="true"/>
<item android:color="@color/focused_color" android:state_focused="true"/>
<item android:color="@color/state_hovered" android:state_hovered="true"/>
<item android:color="?attr/colorAccent"/>
</selector>
Затем вы можете использовать этот цветовой ресурс в своей фигуре вместо colorAccent
.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/button_color_selector"/>
</shape>
Вы также можете сделать каждый изцвета в вашем цветовом состоянии перечисляют настраиваемый атрибут с помощью , определяя пользовательские атрибуты и ссылаясь на эти атрибуты в ваших стилях.Я не буду вдаваться в подробности ради краткости.
Вы можете сделать это для рисования аналогично, создав список состояний для рисования .
Наконец, вы захотите использовать dp
вместо px
, если вы не абсолютно уверены, вы хотите использовать px
.Это предотвратит странные появления при разной плотности экрана.