Changement de couleur du bouton D'Action flottant de l'androïde

essaie depuis des heures de changer la couleur des boutons flottants, 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 code via

FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));

ou

fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));

mais aucun de ces éléments n'a fonctionné. J'ai également essayé les solutions dans le "question en double" , mais aucun d'eux ne fonctionne, button est resté vert et est également devenu un carré.

j'aimerais une réponse, merci.

P. S .. Ce serait aussi bien de savoir comment ajouter l'effet d'ondulation, ne pouvait pas comprendre cela non plus.

380
demandé sur Marko 2015-06-22 00:20:22

18 réponses

comme décrit dans la documentation , par défaut il prend la couleur définie dans styles.xml attribut colorAccent .

la couleur d'arrière-plan de cette vue par défaut à la colorAccent de votre thème. Si vous souhaitez modifier ceci à l'exécution, vous pouvez le faire via setBackgroundTintList(ColorStateList).

Si vous souhaitez changer la couleur

  • en XML avec l'attribut app: backgroundtin
<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" >
  • en code avec .setBackgroundTintList (réponse ci-dessous par ywwwynm )

@Dantalian mentionné dans les commentaires, si vous souhaitez changer la couleur de l'icône, vous pouvez utiliser

android:tint="@color/white"     
813
répondu Marko 2017-05-23 12:26:36

la réponse de Vijet Badigannavar est correcte mais utiliser ColorStateList est généralement compliqué et il ne nous a pas dit comment faire. Puisque nous nous concentrons souvent sur la modification de la couleur de View dans l'état normal et pressé, je vais ajouter plus de détails:

  1. si vous voulez changer la couleur de FAB dans l'état normal, vous pouvez juste écrire

    mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
    
  2. Si vous voulez changer FAB couleur dans l'état pressé, merci pour la bibliothèque de soutien de conception 22.2.1 , vous pouvez juste écrire

    mFab.setRippleColor(your color in int);
    

    en définissant cet attribut, lorsque vous avez appuyé longtemps sur le FAB , une ondulation avec votre couleur apparaîtra à votre point de contact et révélera dans toute la surface de FAB . Veuillez noter qu'il ne changera pas la couleur de FAB dans l'état normal. En dessous de API 21 (Lollipop), il n'y a pas d'effet d'ondulation, mais la couleur de FAB va encore changer lorsque vous êtes à la pression.

enfin, si vous voulez mettre en œuvre un effet plus complexe pour les États, alors vous devez creuser profondément dans ColorStateList , voici une question en discutant: Comment puis-je créer ColorStateList programmatically? .

mise à JOUR: Merci pour le commentaire de @Kaitlyn. Pour supprimer la touche de FAB en utilisant backgroundtin comme couleur, vous pouvez définir app:borderWidth="0dp" dans votre XML.

198
répondu ywwynm 2017-05-23 10:31:39

Comme Vasil Valchev , a indiqué dans un commentaire, il est plus simple qu'il n'y paraît, mais il y a une subtile différence que je n'étais pas le remarquer 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"/>

Avis c'est:

app:backgroundTint="@android:color/white"

et Non

android:backgroundTint="@android:color/white"
89
répondu HenriqueMS 2018-04-18 13:51:12

si vous essayez de changer la couleur de FAB en utilisant app, Il ya un problème. cadre de bouton ont une couleur différente, donc 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)));
43
répondu ergo 2015-09-16 14:07:09

il suffit d'utiliser,

app:backgroundTint="@color/colorPrimary"

ne pas utiliser,

android:backgroundTint="@color/colorPrimary"
38
répondu Ashana.Jackol 2016-03-08 09:00:37

le FAB est coloré sur la base de votre colorAccent .

<style name="AppTheme" parent="Base.Theme.AppCompat.Light">
    <item name="colorAccent">@color/accent</item>
</style>
27
répondu tachyonflux 2015-06-21 21:55:41
mFab.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext,R.color.mColor)));
13
répondu Reza Isfandyari 2017-06-16 12:50:29

D'autres solutions peuvent fonctionner. C'est le 10 gorille approche qui a l'avantage d'être largement applicable dans ce cas et d'autres semblables:

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>
11
répondu Robin Davies 2015-11-21 15:10:45

le document suggère qu'il prend le @color/accent par défaut. Mais nous pouvons l'Annuler sur le code en utilisant

fab.setBackgroundTintList(ColorStateList)

N'oubliez pas,

la version API minimum 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 dessinable personnalisé et décorer!

9
répondu Vijet Badigannavar 2015-06-29 18:32:47

merci à autocomplete. J'ai eu de la chance après quelques coups et des 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.

5
répondu Gaurav Kumar Gupta 2015-11-16 09:30:15
 <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 inclure l'attribut dans votre fab

   app:backgroundTint="@color/addedColor"
5
répondu Gavine Joyce 2016-06-21 07:07:47

j'ai le même problème et tout me coupe les cheveux. Merci pour ce https://stackoverflow.com/a/35697105/5228412

Ce que nous pouvons faire..

 favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));

ça marche très bien pour moi et souhaiter à d'autres qui arriveront ici.

4
répondu Purvik Rana 2017-05-23 11:47:31

le point que nous manquons est qu'avant de définir la couleur sur le bouton, il est important de travailler sur la valeur que vous voulez pour cette couleur. Donc vous pouvez aller à valeurs > couleur. Vous trouverez ceux par défaut, mais vous pouvez également créer des couleurs par copping-coller, modifier les couleurs et les noms. Puis... quand vous allez pour changer la couleur du bouton flottant (en activity_main), vous pouvez choisir celui que vous avez créé

Exemple-code sur les valeurs > couleurs avec couleurs par défaut + 3 autres couleurs que j'ai créé:

<?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éé et nommé "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"/>

ça a marché pour moi. Bonne Chance!

1
répondu Nidia F. 2016-04-15 17:16:54

Je l'ai fait comme ça android:background="@couleur/colorAccent" je vais simplement dans le répertoire res puis je clique sur les valeurs du répertoire et ensuite sur les couleurs.xml en couleurs.xml je viens de changer la couleur de colorAccent et l'appeler dans android: arrière-plan et son fait

1
répondu sana sajjad 2018-04-29 16:46:19

en utilisant Data Binding vous pouvez faire quelque chose comme ceci:

android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
1
répondu Jan Málek 2018-09-13 13:14:57

changer la couleur de fond du bouton D'Action flottant en utilisant la ligne ci-dessous app: backgroundtin= "@color / blue "

changement de couleur de l'icône du bouton D'action flottant android:tint="@couleur/blanc"

0
répondu Kishore Reddy 2017-10-12 07:23:45

vous pouvez l'utiliser dans le cas où vous souhaitez modifier le code flottant.setBackgroundTintList (getResources ().getColorStateList (R. color.vermelho));

0
répondu DiegoS 2018-06-07 19:11:05

add colors in color.xml file

ajouter des couleurs en couleur.fichier xml, puis ajoutez cette ligne de code... floatingActionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.fab2_color)));

0
répondu Progga Ilma 2018-08-31 16:32:35