FAB actuel
J'aimerais savoir comment changer la couleur de l'icône du widget FAB (bouton d'action flottant) fourni par la bibliothèque 'com.Android.support:design:22.2.0' du vert au blanc.
style.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
<color name="color_primary">#00B33C</color>
<color name="color_primary_dark">#006622</color>
<color name="accent">#FFB366</color>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<include Android:id="@+id/toolbar" layout="@layout/toolbar" />
<TextView Android:id="@+id/text"
Android:text="@string/hello_world"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="16dp"
Android:paddingTop="16dp"
Android:textSize="20sp" />
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler_view"
Android:scrollbars="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingLeft="8dp"
Android:paddingRight="8dp"
Android:paddingTop="8dp"
Android:paddingBottom="16dp" />
</LinearLayout>
<Android.support.design.widget.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="end|bottom"
Android:src="@Android:drawable/ic_input_add"
Android:layout_margin="24dp"
app:elevation="6dp"
app:pressedTranslationZ="12dp"
app:borderWidth="0dp" />
Vous pouvez le changer par programme en utilisant ColorFilter.
//get the drawable
Drawable myFabSrc = getResources().getDrawable(Android.R.drawable.ic_input_add);
//copy it in a new one
Drawable willBeWhite = myFabSrc.getConstantState().newDrawable();
//set the color filter, you can use also Mode.SRC_ATOP
willBeWhite.mutate().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
//set it to your fab button initialized before
myFabName.setImageDrawable(willBeWhite);
En utilisant Android: propriété de teinte, vous pouvez définir la couleur comme ceci
<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:tint="@Android:color/white"
Android:src="@Android:drawable/ic_input_add"
/>
Si vous utilisez Material Components
<com.google.Android.material.floatingactionbutton.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_margin="16dp"
Android:layout_gravity="bottom|end"
app:fabSize="normal"
app:tint="@color/colorAccent"
app:srcCompat="@drawable/ic_google"/>
Si vous souhaitez utiliser le changement de couleur par défaut d'icône app:tint="@null"
C'est plus facile que d'obtenir les éléments dessinables, il vous suffit d'accéder au filtre de couleur et de le définir sur la couleur souhaitée.
FloatingActionButton myFab = (FloatingActionButton) findViewById(R.id.myfabid);
myFab.setColorFilter(Color.WHITE);
Utilisez la version blanche de ic_add à partir du site de conception de Google.
Android:tint
ressemble à une solution propre, mais elle n’est pas prise en charge en dessous du niveau 21 de l’API
L'utilisation d'une image bitmap ajoute moins de complexité à votre application que d'essayer de modifier la couleur d'une icône existante par programme. Moins de complexité signifie moins de choses à tester :)
Puisque FloatingActionButton
s'étend ImageView
, nous pouvons utiliser ImageViewCompat
pour colorer l’icône:
ImageViewCompat.setImageTintList(
floatingActionButton,
ColorStateList.valueOf(Color.WHITE)
);