Versucht seit Stunden, die Farbe der Floating Action-Schaltfläche von Material zu ändern, jedoch ohne Erfolg.
<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" />
Ich habe versucht hinzuzufügen
Android:background="@color/mycolor"
oder per Code
FloatingActionButton fab = (FloatingActionButton) rootView.findViewById(R.id.profile_edit_fab);
fab.setBackgroundColor(Color.parseColor("#mycolor"));
oder
fab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#mycolor")));
Aber nichts davon funktionierte. Ich habe auch die Lösungen in der "Duplikat-Frage" ausprobiert, aber keine davon funktioniert, Button blieb grün und wurde auch zu einem Quadrat.
Ich hätte eine ausführliche Antwort, danke.
P.S. Es wäre auch schön zu wissen, wie man den Welleneffekt hinzufügt, das konnte ich auch nicht verstehen.
Wie in der documentation beschrieben, nimmt es standardmäßig die in styles.xml Attribut colorAccent eingestellte Farbe an.
Die Hintergrundfarbe dieser Ansicht ist standardmäßig der colorAccent Ihres Themas. Wenn Sie dies zur Laufzeit ändern möchten, können Sie dies über setBackgroundTintList (ColorStateList) tun.
Wenn Sie die Farbe ändern möchten
<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" >
Wie @Dantalian in den Kommentaren erwähnt, können Sie, wenn Sie die Symbolfarbe ändern möchten, verwenden
Android:tint="@color/white"
Vijet Badigannavars Antwort ist richtig, aber ColorStateList
zu verwenden ist normalerweise kompliziert und er hat uns nicht gesagt, wie es geht. Da wir uns häufig darauf konzentrieren, die Farbe von View
im normalen und gedrückten Zustand zu ändern, füge ich weitere Details hinzu:
Wenn Sie die Farbe von FAB
im Normalzustand ändern möchten, können Sie einfach schreiben
mFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
Wenn Sie die Farbe von FAB
im gedrückten Zustand ändern möchten, danke für Design Support Library 22.2.1, können Sie einfach schreiben
mFab.setRippleColor(your color in int);
Wenn Sie dieses Attribut setzen, wird durch langes Drücken von FAB
eine Ripple mit Ihrer Farbe an Ihrem Berührungspunkt angezeigt und in die gesamte Oberfläche von FAB
eingeblendet. Bitte beachten Sie, dass die Farbe von FAB
im normalen Zustand nicht geändert wird. Unterhalb von API 21 (Lollipop) gibt es keinen Ripple-Effekt. Die Farbe von FAB
ändert sich jedoch, wenn Sie darauf drücken.
Wenn Sie einen komplexeren Effekt für Zustände implementieren möchten, sollten Sie zum Schluss tief in ColorStateList
eintauchen. Hier wird eine SO - Frage behandelt: Wie kann ich ColorStateList programmatisch erstellen? .
UPDATE: Danke für den Kommentar von @ Kaitlyn. Um den Strich von FAB mit Hintergrundfarbe als Farbe zu entfernen, können Sie app:borderWidth="0dp"
in Ihrer XML-Datei festlegen.
Wie Vasil Valchev in einem Kommentar feststellt, ist es einfacher als es aussieht, aber es gibt einen subtilen Unterschied, den ich in meinem XML nicht bemerkt habe.
<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"/>
Beachten Sie, dass es ist:
app:backgroundTint="@Android:color/white"
und nicht
Android:backgroundTint="@Android:color/white"
wenn Sie versuchen, die Farbe von FAB mithilfe der App zu ändern, haben einige Probleme . Der Rahmen der Schaltfläche hat eine andere Farbe, also müssen Sie Folgendes tun:
app:backgroundTint="@Android:color/transparent"
und im Code die Farbe einstellen:
actionButton.setBackgroundTintList(ColorStateList.valueOf(getResources().getColor(R.color.white)));
benutz einfach,
app:backgroundTint="@color/colorPrimary"
nicht verwenden,
Android:backgroundTint="@color/colorPrimary"
Die FAB wird basierend auf Ihrer colorAccent
farbig dargestellt.
<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)));
Andere Lösungen können funktionieren. Dies ist der 10-Pfund-Gorilla-Ansatz, der den Vorteil hat, in diesem und ähnlichen Fällen breit anwendbar zu sein:
Styles.xml:
<style name="AppTheme.FloatingAccentButtonOverlay" >
<item name="colorAccent">@color/colorFloatingActionBarAccent</item>
</style>
ihre Layout-XML:
<Android.support.design.widget.FloatingActionButton
Android:theme="AppTheme.FloatingAccentButtonOverlay"
...
</Android.support.design.widget.FloatingActionButton>
Das Dokument legt nahe, dass es standardmäßig die @ Farbe/den Akzent nimmt. Aber wir können es mit dem Code überschreiben
fab.setBackgroundTintList(ColorStateList)
Denken Sie auch daran,
Die Mindest-API-Version für die Verwendung dieser Bibliothek beträgt 15, daher müssen Sie sie aktualisieren! Wenn Sie dies nicht tun möchten, müssen Sie ein benutzerdefiniertes Zeichenelement definieren und es dekorieren!
<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"/>
Beachten Sie, dass Sie Farben in res/values / color.xml Hinzufügen und das Attribut in Ihre Datenbank aufnehmen
app:backgroundTint="@color/addedColor"
Dank Autovervollständigung. Ich hatte Glück nach ein paar Treffern und Prüfungen:
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
card_view:backgroundTint="@color/whicheverColorYouLike"
- oder - (beide sind im Grunde dasselbe)
xmlns:app="http://schemas.Android.com/apk/res-auto"
app:backgroundTint="@color/whicheverColorYouLike"
Dies funktionierte für mich mit der API-Version 17 mit der Designbibliothek 23.1.0.
Ich habe das gleiche Problem und es schnappt mir alle Haare. Danke dafür https://stackoverflow.com/a/35697105/5228412
Was wir tun können..
favourite_fab.setImageDrawable(ContextCompat.getDrawable(getBaseContext(), R.drawable.favourite_selected));
es funktioniert gut für mich und wünscht anderen, die hier erreichen werden.
Bei der Verwendung von Data Binding können Sie Folgendes tun:
Android:backgroundTint="@{item.selected ? @color/selected : @color/unselected}"
Ich habe ein sehr einfaches Beispiel gemacht
ich habe es so gemacht. Android: background = "@ color/colorAccent" Ich gehe einfach in den Ordner res und dann auf Ordnerwerte und dann auf colors.xml in colors.xml erledigt
Uns fehlt der Punkt, dass es wichtig ist, vor dem Festlegen der Farbe für die Schaltfläche den gewünschten Wert für diese Farbe festzulegen. Sie können also auf Werte> Farbe gehen. Sie finden die Standardfarben, Sie können aber auch Farben erstellen, indem Sie sie abschließen und einfügen und die Farben und Namen ändern. Wenn Sie dann die Farbe der schwebenden Schaltfläche (in activity_main) ändern, können Sie die von Ihnen erstellte auswählen
Beispiel - Code für Werte> Farben mit Standardfarben + 3 weitere von mir erstellte Farben:
<?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>
Nun mein Floating Action Button mit der Farbe, die ich erstellt habe und "corPar" heißt:
<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"/>
Es hat für mich funktioniert. Viel Glück!
Ändern der Hintergrundfarbe der Floating-Aktionsschaltfläche mithilfe der unteren Zeile
app:backgroundTint="@color/blue"
Ändern der Farbe der Floating-Aktionstaste
Android:tint="@color/white"
Mit dem Material Theme und den Materialkomponenten FloatingActionButton
Standardmäßig wird die in _styles.xml
_ festgelegte Farbe verwendet colorSecondary
.
app:backgroundTint
in xml verwenden:_<com.google.Android.material.floatingactionbutton.FloatingActionButton
...
app:backgroundTint=".."
app:srcCompat="@drawable/ic_plus_24"/>
_
Sie können fab.setBackgroundTintList();
verwenden
Sie können Ihren Stil mit dem Attribut <item name="backgroundTint">
anpassen
_ <!--<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item> -->
<style name="MyFloatingActionButton" parent="@style/Widget.MaterialComponents.FloatingActionButton">
<item name="backgroundTint">#00f</item>
</style>
_
materialThemeOverlay
Attribut zum Überschreiben der Standardfarben nur für einige Komponenten:_ <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>
_
Neue Themenattributzuordnung für Floating Action Button in Material 1.1.0
In Ihrem App-Thema:
<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>
sie können es verwenden, wenn Sie den Code ändern möchten floating.setBackgroundTintList (getResources (). getColorStateList (R.color.vermelho));