it-swarm.com.ru

Как я могу стилизовать Android Switch?

Виджет переключателя, представленный в API 14, по умолчанию оформлен в голографической теме. Я хочу, чтобы стиль немного отличался, меняя цвета и придавая форму по причинам брендинга. Как можно это сделать? Я знаю, что это должно быть возможно, так как я видел разницу между стандартным ICS и ​​темой Samsung TouchWiz.

enter image description here

Я предполагаю, что мне понадобятся некоторые графические элементы состояния, и я видел несколько стилей в http://developer.Android.com/reference/Android/R.styleable.html с Switch_thumb и Switch_track, которые похоже, что я мог бы после. Я просто не знаю, как их использовать.

Я использую ActionbarSherlock, если это имеет значение. Конечно, только устройства с API v14 или выше смогут использовать коммутатор вообще.

116
Glenn.nz

Вы можете определить drawables, которые используются для фона, и часть переключателя как это:

<Switch
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:thumb="@drawable/switch_thumb"
    Android:track="@drawable/switch_bg" />

Теперь вам нужно создать селектор, который определяет различные состояния для переключателя, который можно рисовать. Вот копии из источников Android:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:drawable="@drawable/switch_thumb_disabled_holo_light" />
    <item Android:state_pressed="true"  Android:drawable="@drawable/switch_thumb_pressed_holo_light" />
    <item Android:state_checked="true"  Android:drawable="@drawable/switch_thumb_activated_holo_light" />
    <item                               Android:drawable="@drawable/switch_thumb_holo_light" />
</selector>

Это определяет рисованный большой палец, изображение, которое перемещается по фону. Для слайдера используются четыре ninepatch изображения:

Деактивированная версия (версия xhdpi, которую использует Android)The deactivated version
Нажатый слайдер: The pressed slider
Активированный слайдер (в состоянии):The activated slider
Версия по умолчанию (отключено): enter image description here

Есть также три различных состояния для фона, которые определены в следующем селекторе:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false" Android:drawable="@drawable/switch_bg_disabled_holo_dark" />
    <item Android:state_focused="true"  Android:drawable="@drawable/switch_bg_focused_holo_dark" />
    <item                               Android:drawable="@drawable/switch_bg_holo_dark" />
</selector>

Деактивированная версия: The deactivated version
Сфокусированная версия: The focused version
И версия по умолчанию:the default version

Чтобы иметь стилизованный переключатель, просто создайте эти два селектора, установите для них вид переключателя, а затем измените семь изображений на нужный вам стиль.

252
Janusz

Это потрясающий подробный ответ от Janusz. Но только ради людей, которые приходят на эту страницу за ответами, более простой способ - http://Android-holo-colors.com/ (неработающая ссылка), ссылка на которую Android Asset Studio

Хорошее описание всех инструментов: AndroidOnRocks.com (сайт сейчас не в сети)

Тем не менее, я настоятельно рекомендую всем прочитать ответ Януша, так как это сделает понимание более ясным. Используйте инструмент, чтобы делать вещи очень быстро

50
kishu27

Вы можете настроить стили материала, задав различные цветовые свойства. Например пользовательская тема приложения

<style name="CustomAppTheme" parent="Theme.AppCompat">
    <item name="Android:textColorPrimaryDisableOnly">#00838f</item>
    <item name="colorAccent">#e91e63</item>
</style>

Тема пользовательского переключателя

<style name="MySwitch" parent="@style/Widget.AppCompat.CompoundButton.Switch">
    <item name="Android:textColorPrimaryDisableOnly">#b71c1c</item>
    <item name="Android:colorControlActivated">#1b5e20</item>
    <item name="Android:colorForeground">#f57f17</item>
    <item name="Android:textAppearance">@style/TextAppearance.AppCompat</item>
</style>

Вы можете настроить трек переключения и переключить большой палец , как показано на рисунке ниже, определив элементы рисования в формате XML. Для получения дополнительной информации http://www.zoftino.com/Android-switch-button-and-custom-switch-examples

custom switch track and thumb

3
Arnav Rao

Альтернативный и гораздо более простой способ - использовать фигуры вместо 9-патчей. Это уже объяснено здесь: https://stackoverflow.com/a/24725831/512011

1
netpork