Le widget de commutateur introduit dans l'API 14 est stylé par défaut avec le thème holo. Je veux un style légèrement différent, en changeant ses couleurs et sa forme pour des raisons de marque. Comment on s'y prend? Je sais que cela doit être possible, comme je l’ai déjà vu la différence entre ICSpar défaut _ et le thème Touchwiz de Samsung
Je suppose que je vais avoir besoin de dessins tirables d’états, et j’ai vu quelques styles dans http://developer.Android.com/reference/Android/R.styleable.html avec Switch_thumb et Switch_track qui ressemble à ce que je pourrais être après. Je ne sais tout simplement pas comment m'y prendre.
J'utilise ActionbarSherlock si cela fait une différence. Bien entendu, seuls les appareils fonctionnant sous API v14 ou ultérieure pourront utiliser un commutateur.
Vous pouvez définir les éléments dessinables utilisés pour l’arrière-plan et la partie commutateur de la manière suivante:
<Switch
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:thumb="@drawable/switch_thumb"
Android:track="@drawable/switch_bg" />
Vous devez maintenant créer un sélecteur définissant les différents états du commutateur sélectionnable. Voici les copies des sources 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>
Ceci définit le pouce pouvant être dessiné, l’image déplacée sur l’arrière-plan. Il y a quatre ninepatch images utilisées pour le curseur:
La version désactivée (version xhdpi que Android utilise)
Le curseur enfoncé:
Le curseur activé (état activé):
La version par défaut (état désactivé):
Il existe également trois états différents pour l'arrière-plan qui sont définis dans le sélecteur suivant:
<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>
La version désactivée:
La version ciblée:
Et la version par défaut:
Pour avoir un bouton stylé, créez simplement ces deux sélecteurs, réglez-les sur votre vue Basculement, puis modifiez les sept images selon le style souhaité.
C'est une réponse détaillée impressionnante de Janusz. Mais juste pour le bien des gens qui viennent sur cette page pour obtenir des réponses, le moyen le plus simple est d’arriver à http://Android-holo-colors.com/ (lien mort) lié à partir de Android Asset Studio
Une bonne description de tous les outils est à AndroidOnRocks.com (site hors connexion maintenant)
Cependant, je recommande vivement à tous de lire la réponse de Janusz, car elle permettra de mieux comprendre. Utilisez l'outil pour faire des choses très vite
Vous pouvez personnaliser les styles de matériau en définissant différentes propriétés de couleur. Par exemple thème d'application personnalisé
<style name="CustomAppTheme" parent="Theme.AppCompat">
<item name="Android:textColorPrimaryDisableOnly">#00838f</item>
<item name="colorAccent">#e91e63</item>
</style>
Thème du commutateur personnalisé
<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>
Vous pouvez personnaliser le changement de piste et le changement de pouce comme ci-dessous en définissant les éléments dessinables xml. Pour plus d'informations http://www.zoftino.com/Android-switch-button-and-custom-switch-examples
Un moyen alternatif et beaucoup plus facile consiste à utiliser des formes au lieu de 9 patchs. Il est déjà expliqué ici: https://stackoverflow.com/a/24725831/512011