Je crée une application Android et j'utilise les bibliothèques AndroidX et le thème de conception Matériau. Mon thème d'application sur styles.xml
est:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
J'ai le FAB suivant d'une bibliothèque personnalisée:
<com.leinardi.Android.speeddial.SpeedDialView
Android:id="@+id/work_log_fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
app:layout_behavior="@string/speeddial_scrolling_view_snackbar_behavior"
app:sdMainFabClosedSrc="@drawable/ic_add_white_24dp"
app:sdOverlayLayout="@id/overlay" />
Et aussi essayé le FAB par défaut:
<com.google.Android.material.floatingactionbutton.FloatingActionButton
Android:id="@+id/fab"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="end|bottom"
Android:src="@drawable/ic_add_white_24dp"
Android:layout_margin="16dp" />
Peu importe la couleur de l'icône (un vecteur pouvant être dessiné), l'icône à l'intérieur du FAB (de la bibliothèque et de la valeur par défaut) est toujours noire. J'ai limité le problème au thème de la conception matérielle, depuis l'utilisation de l'ancien Theme.AppCompat.Light.DarkActionBar
au lieu du nouveau Theme.MaterialComponents.Light.DarkActionBar
l’icône à l’intérieur du FAB obtient la couleur du vecteur d’origine pouvant être dessiné.
Est-ce que quelqu'un sait pourquoi cela se passe et comment le résoudre?
J'ai résolu ceci en utilisant:
app:tint="@color/COLOR_OF_ICON"
et pas:
Android:tint="@color/COLOR_OF_ICON"
Comme indiqué dans cette réponse , si votre icône a plusieurs couleurs ou si vous souhaitez conserver la couleur d'origine de votre icône, attribuez @null
comme teinte:
app:tint="@null"
Pour MaterialComponents
Theme, vous pouvez définir les couleurs suivantes.
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorPrimaryVariant">@color/primaryVariant</item>
<item name="colorOnPrimary">@color/onPrimary</item>
<item name="colorSecondary">@color/secondary</item>
<item name="colorSecondaryVariant">@color/secondaryVariant</item>
<item name="colorOnSecondary">@color/onSecondary</item>
<item name="colorAccent">@color/accent</item>
<item name="colorSurface">@color/surface</item>
<item name="colorOnSurface">@color/onSurface</item>
<item name="colorError">@color/error</item>
<item name="colorOnError">@color/onError</item>
<item name="colorButtonNormal">@color/buttonNormal</item>
<item name="colorControlNormal">@color/controlNormal</item>
<item name="colorControlActivated">@color/controlActivated</item>
<item name="colorControlHighlight">@color/controlHighlight</item>
<item name="colorBackgroundFloating">@color/backgroundFloating</item>
</style>
colorSecondary
est la couleur responsable deFloatingActionButton
. etcolorOnSecondary
est la couleur responsable de la couleur de l'icôneFloatingActionButton
.
Dans votre AppTheme
vous n'avez pas défié le colorSecondary
. Donc, il a pris la couleur noire par défaut du parent Theme.MaterialComponents.Light.DarkActionBar
.
Référence: sommet de développement Android, 2018 - Les composants de la conception matérielle
Selon page de documentation GitHub relative à FloatingActionButton de la bibliothèque Material Components , les seuls attributs qui affectent l'icône sont:
app:srcCompat
app:tint
app:maxImageSize
Dans ce cas, puisque votre couleur est définie comme une constante (#FFF
), le seul qui semble avoir du sens est app:tint
. Peut-être que quelque chose dans votre thème a mis cela au noir?
Vous devriez pouvoir le remplacer en définissant app:tint="#FFF"
sur votre FAB.
Est-ce que votre icône est multicolore
Ajouter seulement
app:tint="@null"
mais si vous voulez seulement changer de couleur
@ dimen/fab_margin -> 16dp
<com.google.Android.material.floatingactionbutton.FloatingActionButton
Android:id="@+id/fab"
style="@style/Widget.MaterialComponents.FloatingActionButton"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|end"
Android:layout_margin="@dimen/fab_margin"
app:backgroundTint="@color/colorAccent"
app:srcCompat="@drawable/ic_add"
app:tint="@color/colorWhite" />
Style:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>