Как я могу стиль Android переключатель?

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

enter image description here

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

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

4 ответов


вы можете определить drawables которые использованы для предпосылки, и часть switcher как это:

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

Теперь вам нужно создать селектор, который определяет различные состояния для переключателя drawable. Здесь копии из источников 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>

это определяет большой палец drawable, изображение, которое перемещается по фону. Их четыре ninepatch изображения для слайдера:

деактивированная версия (xhdpi версия, которую использует Android)The deactivated version
Нажатый ползунок:The pressed slider
Активированный слайдер (в состоянии on):The activated slider
Версия по умолчанию (off state):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

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


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

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

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


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

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

пользовательский переключатель theme

<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>

Вы можете настроить переключатель трек и переключатель thumb как показано ниже, определив XML-чертежи. За дополнительной информацией http://www.zoftino.com/android-switch-button-and-custom-switch-examples

custom switch track and thumb


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