Cela fait des heures que nous essayons de changer la couleur du bouton d’action flottant de Material, mais sans succès.
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/profile_edit_fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="end|bottom"
Android:layout_margin="16dp"
Android:clickable="true"
Android:src="@drawable/ic_mode_edit_white_24dp" />
J'ai essayé d'ajouter
Android:background="@color/mycolor"
ou par code
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));
ou
fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));
Mais rien de ce qui précède n'a fonctionné. J'ai également essayé les solutions dans la "question dupliquée" , mais aucune d'entre elles ne fonctionne, le bouton est resté vert et est également devenu un carré.
Je voudrais une réponse détaillée, merci.
P.S. Il serait également agréable de savoir comment ajouter un effet d'entraînement, je ne pouvais pas comprendre cela non plus.
Comme décrit dans la documentation , il utilise par défaut la couleur définie dans styles.xml attribut colorAccent.
La couleur d'arrière-plan de cette vue correspond par défaut à colorAccent de votre thème. Si vous souhaitez modifier cela au moment de l'exécution, vous pouvez le faire via setBackgroundTintList (ColorStateList).
Si vous souhaitez changer de couleur
<Android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/ic_add"
app:backgroundTint="@color/orange"
app:borderWidth="0dp"
app:elevation="6dp"
app:fabSize="normal" >
Comme @Dantalian mentionné dans les commentaires, si vous souhaitez modifier la couleur de l'icône, vous pouvez utiliser
Android:tint="@color/white"
La réponse de Vijet Badigannavar est correcte, mais l'utilisation de ColorStateList
est généralement compliquée et il ne nous a pas expliqué comment procéder. Comme nous nous attachons souvent à changer la couleur de View
à l'état normal et pressé, je vais ajouter plus de détails:
Si vous voulez changer la couleur de FAB
en état normal, vous pouvez simplement écrire
mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
Si vous souhaitez modifier la couleur de FAB
à l'état pressé, merci à Design Support Library 22.2.1, vous pouvez simplement écrire
mFab.setRippleColor(your color in int);
En définissant cet attribut, lorsque vous avez appuyé longuement sur la FAB
, une ondulation de votre couleur apparaît au point de contact et révèle toute la surface de FAB
. Veuillez noter que cela ne changera pas la couleur de FAB
en état normal. Sous API 21 (Lollipop), il n’ya pas d’effet d’entraînement mais la couleur de FAB
change quand vous appuyez dessus.
Enfin, si vous souhaitez implémenter des effets plus complexes pour les états, vous devez alors creuser profondément dans ColorStateList
, voici une question SO qui en traite: Comment créer ColorStateList par programme? .
UPDATE: Merci pour le commentaire de @ Kaitlyn. Pour supprimer le contour de FAB en utilisant backgroundTint comme couleur, vous pouvez définir app:borderWidth="0dp"
dans votre code xml.
Comme Vasil Valchev a noté dans un commentaire que c'est plus simple qu'il n'y paraît, mais il y a une différence subtile que je ne remarquais pas dans mon XML.
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/profile_edit_fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="end|bottom"
Android:layout_margin="16dp"
Android:clickable="true"
Android:src="@drawable/ic_mode_edit_white_24dp"
app:backgroundTint="@Android:color/white"/>
Remarquez qu'il est:
app:backgroundTint="@Android:color/white"
et pas
Android:backgroundTint="@Android:color/white"
si vous essayez de changer la couleur de FAB en utilisant app, il y a un problème . cadre du bouton ont une couleur différente, alors ce que vous devez faire:
app:backgroundTint="@Android:color/transparent"
et dans le code définir la couleur:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
juste utiliser,
app:backgroundTint="@color/colorPrimary"
ne pas utiliser,
Android:backgroundTint="@color/colorPrimary"
Le FAB est coloré en fonction de votre colorAccent
.
<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
<item name="colorAccent">@color/accent</item>
</style>
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
D'autres solutions peuvent fonctionner. C'est l'approche du gorille de 10 livres qui a l'avantage d'être largement applicable dans ce cas et des cas similaires:
Styles.xml:
<style name="AppTheme.FloatingAccentButtonOverlay" >
<item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>
votre mise en page xml:
<Android.support.design.widget.FloatingActionButton
Android:theme="AppTheme.FloatingAccentButtonOverlay"
...
</Android.support.design.widget.FloatingActionButton>
Le document suggère qu'il utilise @ color/accent par défaut. Mais nous pouvons le remplacer par du code en utilisant
fab.setBackgroundTintList(ColorStateList)
Rappelez-vous aussi
La version minimale de l'API pour utiliser cette bibliothèque est de 15, vous devez donc la mettre à jour! si vous ne voulez pas le faire, alors vous devez définir un dessin personnalisable et le décorer!
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
app:elevation="6dp"
app:backgroundTint="@color/colorAccent"
app:pressedTranslationZ="12dp"
Android:layout_margin="@dimen/fab_margin"
Android:src="@drawable/add"/>
Notez que vous ajoutez des couleurs dans res/values / color.xml Et incluez l'attribut dans votre fab
app:backgroundTint="@color/addedColor"
Merci à autocomplete. J'ai eu de la chance après quelques coups et essais:
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
card_view:backgroundTint="@color/whicheverColorYouLike"
- ou - (les deux sont fondamentalement la même chose)
xmlns:app="http://schemas.Android.com/apk/res-auto"
app:backgroundTint="@color/whicheverColorYouLike"
Cela a fonctionné pour moi sur la version 17 de l'API avec la bibliothèque de conception 23.1.0.
J'ai le même problème et c'est tout arracher mes cheveux. Merci pour cela https://stackoverflow.com/a/35697105/5228412
Ce que nous pouvons faire..
favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));
cela fonctionne bien pour moi et je souhaite aux autres qui arriveront ici.
Lorsque vous utilisez Liaison de données vous pouvez faire quelque chose comme ceci:
Android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
J'ai fait un très simple exemple
je l'ai fait comme ça Android: background = "@ color/colorAccent" Je viens d'aller au dossier res, puis cliquez sur les valeurs du dossier puis sur colors.xml dans colors.xml terminé
Ce qui nous manque, c'est qu'avant de définir la couleur sur le bouton, il est important de travailler sur la valeur souhaitée pour cette couleur. Donc, vous pouvez aller à valeurs> couleur. Vous trouverez les valeurs par défaut, mais vous pouvez également créer des couleurs en les recadrant et les collant, en modifiant les couleurs et les noms. Alors ... quand vous allez changer la couleur du bouton flottant (dans activity_main), vous pouvez choisir celui que vous avez créé
Exemple - code sur les valeurs> couleurs avec couleurs par défaut + 3 couleurs supplémentaires que j'ai créées:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="corBotaoFoto">#f52411</color>
<color name="corPar">#8e8f93</color>
<color name="corImpar">#494848</color>
</resources>
Maintenant, mon bouton d'action flottant avec la couleur que j'ai créée et nommée "corPar":
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
Android:src="@Android:drawable/ic_input_add"
Android:tint="#ffffff"
app:backgroundTint="@color/corPar"/>
Cela a fonctionné pour moi. Bonne chance!
Changer la couleur d'arrière-plan du bouton d'action flottante à l'aide de la ligne ci-dessous
app:backgroundTint="@color/blue"
Changer la couleur de l'icône du bouton d'action flottante
Android:tint="@color/white"
Avec le matériau thème et les composants matériels FloatingActionButton
par défaut, il prend la couleur définie dans l'attribut _styles.xml
_ colorSecondary
.
app:backgroundTint
au format xml:_<com.google.Android.material.floatingactionbutton.FloatingActionButton
...
app:backgroundTint=".."
app:srcCompat="@drawable/ic_plus_24"/>
_
Vous pouvez utiliser fab.setBackgroundTintList();
Vous pouvez personnaliser votre style à l’aide de l’attribut <item name="backgroundTint">
.
_ <!--<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
<style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
<item name="backgroundTint">#00f</item>
</style>
_
materialThemeOverlay
pour remplacer les couleurs par défaut de certains composants uniquement:_ <style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
<item name="materialThemeOverlay">@style/MyFabOverlay</item>
</style>
<style name="MyFabOverlay">
<item name="colorSecondary">@color/custom2</item>
</style>
_
Nouveau mappage d'attributs de thème pour bouton d'action flottant dans le matériau 1.1.0
Dans le thème de votre application:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- ...whatever else you declare in your app theme.. -->
<!-- Set colorSecondary to change background of FAB (backgroundTint) -->
<item name="colorSecondary">@color/colorSecondary</item>
<!-- Customize colorSecondary to change icon/text of FAB (maps to tint and rippleColor) -->
<item name="colorOnSecondary">@Android:color/white</item>
</style>
vous pouvez l'utiliser si vous souhaitez modifier le code.