Ich erstelle eine Android App und verwende die AndroidX-Bibliotheken und das Materialdesign-Thema. Mein App-Thema auf styles.xml
ist:
<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>
Ich habe das folgende FAB aus einer benutzerdefinierten Bibliothek:
<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" />
Und versuchte auch die Standard-FAB:
<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" />
Unabhängig von der Farbe des Symbols (eines Vektors, der gezeichnet werden kann) ist das Symbol im FAB (aus der Bibliothek und aus der Standardeinstellung) immer schwarz. Ich habe das Problem auf das Thema Materialdesign eingegrenzt, da ich das alte Theme.AppCompat.Light.DarkActionBar
anstelle des neuen Theme.MaterialComponents.Light.DarkActionBar
Das Symbol im FAB erhält die Farbe des ursprünglichen Vektors, der gezeichnet werden kann.
Weiß jemand, warum das passiert und wie man es löst?
Ich habe das gelöst mit:
app:tint="@color/COLOR_OF_ICON"
und nicht:
Android:tint="@color/COLOR_OF_ICON"
Wie in diese Antwort gesagt, weisen Sie @null
Als Farbton zu, wenn Ihr Symbol mehrere Farben hat oder wenn Sie die ursprüngliche Farbe des Symbols beibehalten möchten:
app:tint="@null"
Für MaterialComponents
Theme können Sie die folgenden Farben definieren.
<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
ist die verantwortliche Farbe fürFloatingActionButton
. undcolorOnSecondary
ist die verantwortliche Farbe für die Symbolfarbe vonFloatingActionButton
.
In Ihrem AppTheme
haben Sie sich dem colorSecondary
nicht widersetzt. Also nahm es die Standardfarbe Schwarz von übergeordnetem Theme.MaterialComponents.Light.DarkActionBar
.
Referenz: Android dev summit, 2018 - Die Komponenten des Materialdesigns
Laut der GitHub-Dokumentationsseite für den FloatingActionButton der Material Components Library sind die einzigen Attribute, die sich auf das Symbol auswirken
app:srcCompat
app:tint
app:maxImageSize
In diesem Fall, da Ihre Farbe als Konstante definiert ist (#FFF
), der einzige, der Sinn zu ergeben scheint, ist app:tint
. Vielleicht hat etwas in Ihrem Thema dies auf Schwarz gesetzt?
Sie sollten es überschreiben können, indem Sie app:tint="#FFF"
auf Ihrem FAB.
Ist Ihr Icon ist mehrfarbig
Nur hinzufügen
app:tint="@null"
aber wenn du nur die farbe ändern willst
@ 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" />
Stil:
<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>