wake-up-neo.net

Wie kann ich einen Android Switch stylen?

Das in API 14 eingeführte Schaltwidget ist standardmäßig mit dem Holo-Thema gestaltet. Ich möchte es etwas anders stylen und aus Branding-Gründen seine Farben und Formen ein wenig ändern. Wie geht man damit um? Ich weiß, dass es möglich sein muss, da ich den Unterschied zwischen dem Standard ICS und Samsungs Touchwiz-Theme gesehen habe

enter image description here

Ich gehe davon aus, dass ich einige State Drawables benötige, und ich habe einige Styles in http://developer.Android.com/reference/Android/R.styleable.html mit Switch_thumb und Switch_track gesehen Sieh aus, wonach ich suchen könnte. Ich weiß nur nicht, wie ich damit umgehen soll.

Ich verwende ActionbarSherlock, wenn das einen Unterschied macht. Natürlich können nur Geräte, auf denen API v14 oder höher ausgeführt wird, einen Switch verwenden.

116
Glenn.nz

Sie können die Drawables, die für den Hintergrund verwendet werden, und den Switcher-Teil wie folgt definieren:

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

Jetzt müssen Sie einen Selektor erstellen, der die verschiedenen Zustände für den darstellbaren Switcher definiert. Hier die Kopien aus den Android Quellen:

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

Dies definiert den darstellbaren Daumen, das Bild, das über den Hintergrund bewegt wird. Es gibt vier ninepatch Bilder, die für den Schieberegler verwendet werden:

Die deaktivierte Version (xhdpi-Version, die Android verwendet)The deactivated version
Der gedrückte Schieber: The pressed slider
Der aktivierte Slider (Ein-Zustand):The activated slider
Die Standardversion (Aus-Zustand): enter image description here

Es gibt auch drei verschiedene Zustände für den Hintergrund, die im folgenden Selektor definiert sind:

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

Die deaktivierte Version: The deactivated version
Die fokussierte Version: The focused version
Und die Standardversion:the default version

Um einen gestylten Schalter zu haben, erstellen Sie einfach diese beiden Selektoren, stellen Sie sie auf Ihre Schalteransicht ein und ändern Sie dann die sieben Bilder auf Ihren gewünschten Stil.

252
Janusz

Es ist eine großartige, detaillierte Antwort von Janusz. Der einfachere Weg ist jedoch, nur um den Leuten zu helfen, die auf diese Seite kommen, um Antworten zu erhalten, unter http://Android-holo-colors.com/ (dead link) verlinkt von Android Asset Studio

Eine gute Beschreibung aller Tools finden Sie unter AndroidOnRocks.com (Site jetzt offline)

Ich empfehle jedoch jedem, die Antwort von Janusz zu lesen, da dies das Verständnis klarer macht. Verwenden Sie das Tool, um Dinge ganz schnell zu erledigen

50
kishu27

Sie können Materialstile anpassen, indem Sie verschiedene Farbeigenschaften festlegen. Zum Beispiel benutzerdefiniertes Anwendungsthema

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

Benutzerdefiniertes Schalterthema

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

Sie können die Schalterspur anpassen und den Daumen wie im folgenden Bild ändern, indem Sie XML-Drawables definieren. Weitere Informationen http://www.zoftino.com/Android-switch-button-and-custom-switch-examples

custom switch track and thumb

3
Arnav Rao

Alternativ und viel einfacher ist es, Formen anstelle von 9-Patches zu verwenden. Es wird hier bereits erklärt: https://stackoverflow.com/a/24725831/512011

1
netpork