J'utilise un contrôle Switch standard avec le thème holo.light dans une application ICS.
Je souhaite changer la couleur en surbrillance ou en état du bouton bascule du bleu clair standard au vert.
Cela devrait être facile, mais je n'arrive pas à trouver comment le faire.
android
togglebutton
JamesSugrue
la source
la source
Switch
vers ce sélecteur personnalisé par la suite.Réponses:
À partir de maintenant, il est préférable d'utiliser SwitchCompat à partir de la bibliothèque AppCompat.v7. Vous pouvez ensuite utiliser un style simple pour changer la couleur de vos composants.
ref: Blog des développeurs Android
MODIFIER :
La manière dont il doit être correctement appliqué est à travers
android:theme="@style/Theme.MyTheme"
et cela peut également être appliqué aux styles parents tels que EditTexts, RadioButtons, Switches, CheckBoxes et ProgressBars:la source
colorAccent
, «off» estcolorSwitchThumbNormal
. Si vous utilisez leAppCompat
thème, vous devez utiliserSwitchCompat
plutôt queSwitch
. Si vous utilisez SDK 23+, vous pouvez utiliserandroid:thumbTint
etandroid:thumbTintMode
avec unColorStateList
.En retard pour faire la fête mais c'est comme ça que j'ai fait
Style
Couleurs
Disposition
Résultat
Voir le changement de couleurs pour activer et désactiver le commutateur
la source
SwitchCompat
;)Cela fonctionne pour moi (nécessite Android 4.1):
Notez que l'état "par défaut" doit être ajouté en dernier, comme indiqué ici.
Le seul problème que je vois est que le "pouce" du commutateur apparaît maintenant plus grand que l'arrière-plan ou "piste" du commutateur. Je pense que c'est parce que j'utilise toujours l'image de piste par défaut, qui a un espace vide autour d'elle. Cependant, lorsque j'ai essayé de personnaliser l'image de la piste à l'aide de cette technique, mon commutateur semblait avoir une hauteur de 1 pixel avec juste un ruban du texte d'activation / désactivation apparaissant. Il doit y avoir une solution pour ça, mais je ne l'ai pas encore trouvée ...
Mise à jour pour Android 5
Sous Android 5, le code ci-dessus fait disparaître complètement le commutateur. Nous devrions pouvoir utiliser la nouvelle méthode setButtonTintList , mais cela semble être ignoré pour les commutateurs. Mais cela fonctionne:
Mise à jour pour Android 6-7
Comme l'a déclaré Cheruby dans les commentaires, nous pouvons utiliser le nouveau
setThumbTintList
et cela a fonctionné comme prévu pour moi. Nous pouvons également utilisersetTrackTintList
, mais cela applique la couleur comme un mélange, avec un résultat plus sombre que prévu dans les thèmes de couleurs sombres et plus clair que prévu dans les thèmes de couleurs claires, parfois au point d'être invisible. Dans Android 7, j'ai pu minimiser ce changement en remplaçant le mode de teinte de la piste , mais je ne pouvais pas obtenir de résultats décents avec Android 6. Vous devrez peut-être définir des couleurs supplémentaires qui compensent le mélange. (Avez-vous déjà eu le sentiment que Google ne veut pas que nous personnalisions l'apparence de nos applications?)la source
switchInput.setThumbTintList(buttonStates);
fonctionne également pour Nougat. API 21-22: utilisez DrawableCompat comme suggéré par @Alexey. LeswitchInput.setButtonTintList(buttonStates);
n'a pas fonctionné pour moi, il n'a pas la couleur des états pour mon commutateur. API ci-dessous 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
Celles - ci ont fonctionné pour moi. J'ai également travaillé avec Xamarin, alors traduisez-les en C # dans les moteurs de rendu Android si vous utilisez Xamarin.Forms.Pour modifier le style de commutateur sans utiliser style.xml ou code Java, vous pouvez personnaliser le commutateur en XML de disposition:
C'est l'attribut android: thumbTint et android: trackTint qui vous ont permis de personnaliser la couleur
Voici le résultat visuel de ce XML:
la source
app:thumbTint
au lieu deandroid:thumbTint
et changezswitch
avecSwitchCompat
Créez un commutateur personnalisé et remplacez l'ensemble Vérifié pour changer de couleur:
la source
Bien que la réponse de SubChord soit correcte, elle ne répond pas vraiment à la question de savoir comment définir la couleur "on" sans affecter également les autres widgets. Pour ce faire, utilisez un
ThemeOverlay
dans styles.xml:Et référencez-le dans votre commutateur:
Ce faisant, il affectera UNIQUEMENT la couleur des vues auxquelles vous souhaitez l'appliquer.
la source
Et à l'intérieur de checker_track.xml:
la source
thumbTint
s'applique uniquement à l'API Android 21 et versions ultérieures. Comment si je veux changer la couleur sous Android 21?Je l'ai résolu en mettant à jour le filtre de couleur lorsque l'état du commutateur était changé ...
la source
Peut-être que c'est un peu tard, mais pour les boutons de commutation, le bouton toogle n'est pas la réponse, vous devez changer le dessinable dans le paramètre xml du commutateur:
la source
rendre "newthumb.xml" dessinable
et rendre "newtrack.xml" dessinable
et ajoutez-le dans Switch:
la source
trackTint
outhumbTint
. Il faut l'écrire manuellement et cela fonctionne.Dans Android Lollipop et supérieur, définissez-le dans votre style de thème:
la source
Créez votre propre image à 9 patchs et définissez-la comme arrière-plan du bouton bascule.
http://radleymarx.com/2011/simple-guide-to-9-patch/
la source
La solution proposée par arlomedia a fonctionné pour moi. À propos de son problème d'extraspace, j'ai résolu la suppression de tous les rembourrages du commutateur.
ÉDITER
Comme demandé, voici ce que j'ai.
Dans le fichier de disposition, mon commutateur est à l'intérieur d'une disposition linéaire et après un TextView.
Depuis que je travaille avec Xamarin / Monodroid (min. Android 4.1), mon code est:
swtch_EnableEdit est précédemment défini comme ceci (Xamarin):
Je ne règle pas du tout les paddings et je n'appelle pas .setPadding (0, 0, 0, 0).
la source
vous pouvez créer un style personnalisé pour le widget de commutation qui utilise l'accent de couleur par défaut lorsque vous créez un style personnalisé
la source
Vous pouvez essayer cette bibliothèque, facile à changer de couleur pour le bouton de commutation.
https://github.com/kyleduo/SwitchButton
la source
Essayez de trouver la bonne réponse ici: Sélecteur sur la couleur de fond de TextView . En deux mots, vous devez créer la forme en XML avec la couleur, puis l'affecter à l'état "coché" dans votre sélecteur.
la source
Je ne sais pas comment le faire à partir de java, mais si vous avez un style défini pour votre application, vous pouvez ajouter cette ligne dans votre style et vous aurez la couleur souhaitée pour moi, j'ai utilisé # 3F51B5
la source
Le moyen le plus simple consiste à définir la teinte de la piste et à définir le mode de teinte sur src_over pour supprimer 30% de transparence.
toggle_style.xml
la source
En complément des réponses existantes: vous pouvez personnaliser le pouce et le suivi à l'aide des sélecteurs du
res/color
dossier, par exemple:switch_track_selector
switch_thumb_selector
Utilisez ces sélecteurs pour personnaliser les teintes des pistes et des pouces:
Gardez à l'esprit que si vous utilisez standart
Switch
etandroid
namespace pour ces attributs, cela ne fonctionnera que pour l'API 23 et versions ultérieures, utilisez doncSwitchCompat
avecapp
namespacexmlns:app="http://schemas.android.com/apk/res-auto"
comme solution universelle.Résultat:
la source
En xml, vous pouvez changer la couleur comme suit:
Dynamiquement, vous pouvez changer comme:
la source
Solution pour Android Studio 3.6:
Modifie la couleur du texte de a dans la valeur définie dans le fichier XML de couleur (yourColor).
la source