Avant la AppCompat
sortie de la mise à jour aujourd'hui, j'ai pu changer la couleur des boutons dans Android L mais pas sur les anciennes versions. Après avoir inclus la nouvelle mise à jour AppCompat, je ne peux pas changer la couleur de l'une ou l'autre version, lorsque j'essaie, le bouton disparaît. Quelqu'un sait-il comment changer la couleur du bouton?
Les images suivantes montrent ce que je veux réaliser:
Le bouton blanc est par défaut, le rouge est ce que je veux.
C'est ce que je faisais précédemment pour changer la couleur des boutons dans styles.xml
:
<item name="android:colorButtonNormal">insert color here</item>
et pour le faire dynamiquement:
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
Aussi je l'ai fait changer le parent thème de @android:style/Theme.Material.Light.DarkActionBar
laTheme.AppCompat.Light.DarkActionBar
Réponses:
Corrigé officiellement dans la bibliothèque de support rev.22 (ven 13 mars 2015). Voir le problème de code Google pertinent:
https://issuetracker.google.com/issues/37008632
Exemple d'utilisation
theme.xml:
v21 / theme.xml
la source
android:theme="@style/ColoredButton"
et dans styles.xml<style name="ColoredButton" parent="Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/button_yellow</item> </style>
Modifier (22.06.2016):
La bibliothèque Appcompat a commencé à prendre en charge les boutons de matériau après avoir publié la réponse d'origine. Dans cet article vous pouvez voir la mise en œuvre la plus simple des boutons surélevés et plats.
Réponse originale:
Étant donné que AppCompat ne prend pas encore en charge le bouton, vous pouvez utiliser xml comme arrière-plan. Pour ce faire, j'ai regardé le code source d'Android et trouvé les fichiers associés pour styliser les boutons de matériau.
1 - Regardez l'implémentation originale du bouton matériel depuis la source.
Jetez un oeil à la btn_default_material.xml sur le code source Android .
Vous pouvez copier le fichier dans le dossier drawable-v21 de votre projet. Mais ne touchez pas à la couleur ici. Le fichier que vous devez modifier est le deuxième fichier.
drawable-v21 / custom_btn.xml
2 - Obtenez la forme du bouton du matériau d'origine
Comme vous vous en rendez compte, il y a une forme utilisée à l'intérieur de ce dessin que vous pouvez trouver dans ce fichier du code source .
3 - Obtenir les dimensions du bouton matériel
Et dans ce fichier, vous trouverez quelques dimensions utilisées dans le fichier que vous pouvez trouver ici . Vous pouvez copier le fichier entier et le placer dans votre dossier de valeurs . Ceci est important pour appliquer la même taille (utilisée dans les boutons de matériau) à tous les boutons
4 - Créez un autre fichier dessinable pour les anciennes versions
Pour les anciennes versions, vous devriez avoir un autre dessinable avec le même nom. Je mets directement les éléments en ligne au lieu de les référencer. Vous voudrez peut-être les référencer. Mais encore une fois, la chose la plus importante est les dimensions d'origine du bouton matériel.
drawable / custom_btn.xml
Résultat
Votre bouton aura un effet d'entraînement sur les appareils Lollipop. Les anciennes versions auront exactement le même bouton sauf l'effet d'entraînement. Mais puisque vous fournissez des éléments de dessin pour différents états, ils répondront également aux événements tactiles (comme à l'ancienne).
la source
Cela a été amélioré dans la version 23.0.0 de la bibliothèque AppCompat avec l'ajout de plus de thèmes, y compris
Tout d'abord, incluez la dépendance appCompat si vous ne l'avez pas déjà fait
Maintenant, puisque vous devez utiliser la version 23 de l'application compatible, vous devrez également cibler le SDK-v23!
Dans votre
values/theme
Dans votre
values/style
Dans votre
values-v21/style
Puisque le thème de votre bouton est basé sur
Widget.AppCompat.Button.Colored
La couleur du texte sur le bouton est par défaut le blanc!mais il semble qu'il y ait un problème lorsque vous désactivez le bouton, le bouton changera sa couleur en gris clair, mais la couleur du texte restera blanche!
une solution consiste à définir spécifiquement la couleur du texte du bouton sur blanc! comme je l'ai fait dans le style montré ci-dessus.
maintenant, vous pouvez simplement définir votre bouton et laisser AppCompat faire le reste :)
État désactivé
État activé
Éditer:
Ajouter
<Button android:theme="@style/BrandButtonStyle"/>
la source
<Button android:theme="@style/BrandButtonStyle"/>
. Ce doit être l'theme
attribut et non l'style
attribut.Dans la bibliothèque de support Android 22.1.0, Google a rendu la
Button
teinte sensible. Donc, une autre façon de personnaliser la couleur d'arrière-plan du bouton est d'utiliser lebackgroundTint
attribut.Par exemple,
la source
Pour prendre en charge les boutons de couleur, utilisez la dernière bibliothèque AppCompat (> 23.2.1 ) avec:
Widget AppCompat:
Style AppCompat:
NB! Pour définir une couleur personnalisée en xml: utilisez l'attr:
app
au lieu deandroid
(utiliser
alt+enter
ou déclarerxmlns:app="http://schemas.android.com/apk/res-auto"
utiliserapp
)app : backgroundTint = "@ color / your_custom_color"
Exemple:
la source
Avec la dernière bibliothèque de support, vous pouvez simplement hériter de votre activité
AppCompatActivity
, de sorte qu'elle gonflera votreButton
asAppCompatButton
et vous donnera la possibilité de styliser la couleur de chaque bouton de la mise en page à l'aide deandroid:theme="@style/SomeButtonStyle"
, oùSomeButtonStyle
est:A travaillé pour moi en 2.3.7, 4.4.1, 5.0.2
la source
android:theme
et nonstyle
. Vous pouvez également ajoutercolorControlHighlight
etcolorControlActivated
.Theme.AppCompat.Light
place.si vous voulez ci-dessous le style
ajoutez ce style à votre bouton
si vous voulez ce style
ajouter le code ci-dessous
la source
compile 'com.android.support:appcompat-v7:23.1.0'
Vous devez avoir à ajouter.La réponse est dans THEME pas style
Le problème est que la couleur du bouton colle au colorButtonNormal du thème. J'ai essayé de changer le style de différentes manières sans succès. J'ai donc changé le thème du bouton .
Créez un thème avec colorButtonNormal et colorPrimary:
Utilisez ce thème dans le bouton
Le "AppTheme.Button" peut être n'importe quelle chose qui étend le style de bouton comme ici j'utilise la couleur primaire pour la couleur du texte:
Et vous obtenez le bouton dans n'importe quelle couleur que vous souhaitez compatible avec la conception des matériaux.
la source
Je viens de créer une bibliothèque Android, qui vous permet de modifier facilement la couleur du bouton et la couleur de l'ondulation
https://github.com/xgc1986/RippleButton
Vous n'avez pas besoin de créer un style pour chaque bouton que vous souhaitez avec une couleur différente, vous permettant de personnaliser les couleurs au hasard
la source
ce travail pour moi avec appcompat-v7: 22.2.0 dans android + 4.0
dans vos styles.xml
dans votre fichier de mise en page
la source
Disposition:
styles.xml:
color / button_background_selector.xml:
color / button_text_selector.xml:
la source
Pour ceux qui utilisent un
ImageButton
ici, voici comment procéder:Dans style.xml:
dans v21 / style.xml:
Puis dans votre fichier de mise en page:
la source
Si vous utilisez une solution de style avec colorButtonNormal , n'oubliez pas d'hériter de Widget.AppCompat.Button.Colored pour que l'effet d'entraînement fonctionne;)
Comme
la source
Une autre solution simple utilisant AppCompatButton
la source
Utilisation:
Ou même :
et cela donnera une couleur personnalisée au bouton.
la source
Si vous souhaitez uniquement un bouton de matériau "Plat", vous pouvez personnaliser leur arrière-plan à l'aide de l' attribut selectableItemBackground, comme expliqué ici .
la source
Pour changer la couleur d'un seul bouton
la source
Pour moi, le problème était que dans Android 5.0, cela
android:colorButtonNormal
n'avait aucun effet, et en fait, aucun élément du thème (commeandroid:colorAccent
), mais dans Android 4.4.3, par exemple. Le projet a été configuré aveccompileSdkVersion
ettargetSdkVersion
à 22, j'ai donc apporté toutes les modifications au fur et à mesure que @Muhammad Alfaifi a suggéré, mais à la fin, j'ai remarqué que le problème était le buildToolsVersion , qui n'a pas été mis à jour. Une fois que je suis passé à 23.0.1 , tout commence à fonctionner presque normalement. Maintenant, leandroid:colorButtonNormal
n'a toujours aucun effet, mais au moins le bouton réagit àandroid:colorAccent
, ce qui pour moi est acceptable.J'espère que cet indice pourrait aider quelqu'un. Remarque: J'ai appliqué le style directement au bouton, car le bouton
android:theme=[...]
n'a pas non plus d'effet.la source
Une façon de retirer cela vous permet de simplement pointer vers un style et de NE PAS thématiser TOUS les boutons de votre application de la même manière.
Dans themes.xml, ajoutez un thème
Maintenant, dans styles.xml, ajoutez
Maintenant, dans votre mise en page, pointez simplement le STYLE dans votre bouton
la source
METTRE À JOUR
Utilisez la bibliothèque de support de conception (23.2.0) et les widgets compatibles avec les applications comme ci-dessous
Dans la bibliothèque de support Android 22.1 :
La liste complète des widgets sensibles aux teintes:
Conception matérielle pour les dispositifs pré-sucettes :
la source
Si vous souhaitez utiliser le style AppCompat comme Widget.AppCompat.Button , Base.Widget.AppCompat.Button.Colored , etc., vous devez utiliser ces styles avec des vues compatibles de la bibliothèque de support.
Le code ci-dessous ne fonctionne pas pour les appareils pré-lolipop:
Vous devez utiliser AppCompatButton pour activer les styles AppCompat:
la source
ImageView
est remplacé parAppCompatImageView
et cela devrait être le même avec tous les widgets, qui ont laAppCompat
version correspondante .android.support.v7.widget.AppCompatImageView
explicitement.last target version
@power?J'utilise ça. L'effet d'entraînement et le bouton cliquent sur le travail de l'ombre.
style.xml
Bouton sur la mise en page:
la source
En fait, je ne voulais pas changer mes styles de boutons personnalisés, mais malheureusement, ils ne fonctionnaient plus.
Mon application a une version minSdk de 9 et tout fonctionnait auparavant.
Je ne sais pas pourquoi mais depuis que j'ai supprimé l'androïde: avant le buttonStyle il semble fonctionner à nouveau
maintenant = travail:
<item name="buttonStyle">@style/ButtonmyTime</item>
avant = juste des boutons de matière grise:
<item name="android:buttonStyle">@style/ButtonmyTime</item>
Je n'ai pas de dossier spécial pour la nouvelle version Android car mes boutons sont assez plats et ils devraient être identiques sur toutes les versions Android.
Peut-être que quelqu'un peut me dire pourquoi j'ai dû supprimer le "android:" Le ImageButton fonctionne toujours avec "android:"
la source
Après 2 jours à chercher des réponses, le thème des boutons ne fonctionnait pas pour moi dans l'API <21.
Ma seule solution est de remplacer la teinture AppCompatButton non seulement avec le thème de l'application de base "colorButtonNormal", mais aussi avec la vue backgroundTint comme ceci:
Vous pouvez ensuite définir la couleur de votre bouton comme ceci:
la source
Cette réponse SO m'a aidé à arriver à une réponse https://stackoverflow.com/a/30277424/3075340
J'utilise cette méthode utilitaire pour définir la teinte d'arrière-plan d'un bouton. Il fonctionne avec des appareils pré-sucettes:
Comment utiliser dans le code:
De cette façon, vous n'avez pas besoin de spécifier un ColorStateList si vous voulez juste changer la teinte d'arrière-plan et rien de plus, mais conserver les jolis effets de bouton et ce qui ne l'est pas.
la source
Je me suis mis
android:textColor
à@null
mon bouton thème et ça aide.styles.xml
some_layout.xml
La couleur du texte du bouton est maintenant
colorAccent
définie dansAppTheme
la source
si vous utilisez kotlin, pouvez-vous voir que tous les attributs de MaterialButton sont pris en charge. N'utilisez pas l'attribut android: background. MaterialButton gère son propre arrière-plan dessinable, et la définition d'un nouvel arrière-plan signifie que la couleur désactivée du bouton Matériau ne peut plus garantir que les nouveaux attributs qu'il introduit fonctionneront correctement. Si l'arrière-plan par défaut est modifié, le bouton Matériau ne peut garantir un comportement bien défini. À MainActivity.kt
À activity_main.xml
ressource: exemple de changement de couleur du bouton Matériau
la source
si vous voulez le faire via du code dans n'importe quelle couleur, utilisez ceci:
la source