Dans la nouvelle bibliothèque AppCompat, nous pouvons teinter le bouton de cette façon:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/follow"
android:id="@+id/button_follow"
android:backgroundTint="@color/blue_100"
/>
Comment puis-je définir la teinte du bouton par programmation dans mon code? J'essaie essentiellement d'implémenter une coloration conditionnelle du bouton en fonction de certaines entrées de l'utilisateur.
android
android-appcompat
Stéphane
la source
la source
Réponses:
Selon la documentation, la méthode associée
android:backgroundTint
est setBackgroundTintList (liste ColorStateList)Mettre à jour
Suivez ce lien pour savoir comment créer une ressource de liste d'état des couleurs.
puis chargez-le en utilisant
où
contextInstance
est une instance d'unContext
en utilisant AppCompart
la source
ViewCompat.setBackgroundTintList(View, ColorStateList)
qui peut être utilisé jusqu'à l'API 4. Mais cela ne fonctionne que pour les vues qui implémententTintableBackgroundView
, par exempleAppCompatButton
(au lieu de l'habituelButton
).ViewCompat.setBackgroundTintList(View, ColorStateList)
, comme @Jon Adams l'a suggéré, a encore plus de sens puisque View.setSupportButtonTintList est limité avec desRestrictTo
annotations. Détails ici: developer.android.com/reference/android/support/annotation/…Vous pourriez utiliser
Mais je vous recommanderais d'utiliser une bibliothèque de support de teinture dessinable qui vient de sortir hier:
Vous pouvez en trouver plus dans ce billet de blog (voir la section "Teinture dessinable")
la source
On dirait que les vues ont leurs propres mécanismes pour la gestion des teintes, il vaut donc mieux mettre la liste des teintes:
la source
Pour étendre correctement la réponse de dimsuz en fournissant une situation de code réelle, consultez l'extrait de code suivant:
Cette solution est pour le scénario où un dessinable est utilisé comme arrière-plan du bouton. Cela fonctionne également sur les appareils pré-Lollipop.
la source
Avez-vous essayé quelque chose comme ça?
notez que getResources () ne fonctionnera que dans une activité. Mais il peut également être appelé dans tous les contextes.
la source
voici comment le faire dans kotlin:
la source
Vous pouvez utiliser DrawableCompat par exemple
la source
ceci est facilement géré dans le nouveau bouton de matériau de la bibliothèque de conception de matériaux, tout d'abord, ajoutez la dépendance:
puis dans votre XML, utilisez ceci pour votre bouton:
et quand vous voulez changer la couleur, voici le code dans Kotlin, il n'est pas obsolète et il peut être utilisé avant Android 21:
la source
J'ai réussi à faire fonctionner le mien en utilisant
CompoundButtonCompat.setButtonTintList(button, colour)
.À ma connaissance, cela fonctionne quelle que soit la version d'Android.
la source
J'avais un problème similaire. Je souhaitais colorer un arrière-plan dessinable complexe pour une vue basée sur une valeur de couleur (int). J'ai réussi en utilisant le code:
Où couleur est une valeur int représentant la couleur requise. Cela représente le simple ColorStateList xml:
J'espère que cela t'aides.
la source
ColorStateList.valueOf(ColorInt)
Pour ImageButton, vous pouvez utiliser:
la source
Si vous utilisez
Kotlin
etMaterial Design
, vous pouvez changer la couleur de votreMaterialButton
comme ceci:Vous pouvez l'améliorer encore mieux en créant une fonction d'extension pour votre
MaterialButton
afin de rendre votre code plus lisible et votre codage un peu plus pratique:Ensuite, vous pouvez utiliser votre fonction partout comme ceci:
la source
En plus de la réponse de Shayne3000 , vous pouvez également utiliser une ressource de couleur (pas seulement une couleur int). Version Kotlin :
la source
La réponse suggérée ici ne fonctionne pas correctement sur Android 5.0 si votre liste d'états de couleurs basée sur XML fait référence à des attributs thématiques. Par exemple, j'ai une liste d'états de couleurs xml comme ceci:
Utiliser ceci comme arrière-planTint de xml fonctionne très bien sur Android 5.0 et tout le reste. Cependant, si j'essaie de définir cela dans un code comme celui-ci:
(Ne fais pas ça)
En fait, peu importe si je transmets l'activité ou le contexte du bouton à la méthode ContextCompat.getColorStateList (), ni l'un ni l'autre ne me donnera la liste d'état de couleur appropriée par rapport au thème dans lequel se trouve le bouton. En effet, l'utilisation d'attributs de thème dans les listes d'états de couleurs n'était pas prise en charge avant l'api 23 et ContextCompat ne fait rien de spécial pour les résoudre. À la place, vous devez utiliser AppCompatResources.getColorStateList () qui effectue sa propre analyse syntaxique des ressources / résolution d'attributs de thème sur les appareils <API 23.
Au lieu de cela, vous devez utiliser ceci:
TLDR: utilisez AppCompatResources et non -ContextCompat- si vous avez besoin de ressources thématiques résolues dans toutes les versions d'API d'Android.
Pour plus d'informations sur le sujet, consultez cet article .
la source