Ich zeige Snackbar in DialogFragment innerhalb des positiven Klicks von alertDialog. Hier ist mein Code-Snippet.
Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
.setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();
Ich übergebe die Ansicht des Dialogfragments an die Snackbar. Ich möchte die Hintergrundfarbe schwarz? Wie kann ich das machen? Ich gebe alertDialog im DialogFragment zurück. Und das Thema, das ich für den Dialog einstelle, ist wie folgt
<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Used for the buttons -->
<item name="colorAccent">@color/accent</item>
<!-- Used for the title and text -->
<item name="android:textColorPrimary">@color/primary</item>
<!-- Used for the background -->
<item name="android:background">@color/white</item>
</style>
Obwohl ich die Hintergrundfarbe für den Dialog auf Weiß setze, sollte sie überschrieben werden, indem die Hintergrundfarbe auf die Snackbar gesetzt wird.
Antworten:
Versuchen Sie, die Hintergrundfarbe wie folgt einzustellen:
Es wird 100% funktionieren!
quelle
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
dies seit API-Level 23 (Marshmallow) veraltet ist undContextCompat#getColor
stattdessen verwendet werden sollte.Sie können es so machen
quelle
Wenn Sie eine Hintergrundfarbe für alle Ihre Snackbars definieren möchten, überschreiben Sie einfach den
design_snackbar_background_color
Wert irgendwo in Ihren Ressourcen. Beispielsweise:quelle
Da keine der anderen Antworten eine benutzerdefinierte Stilüberschreibung lieferte (die ich als eine der sichersten Aktualisierungsmethoden betrachte), poste ich hier meine Lösung.
Ich poste eine Lösung, die bereits die neue
AndroidX
(support design 28
) Thema befasst.Vorausgesetzt, Ihre Anwendung verwendet eine benutzerdefinierte Funktion, die
MyAppTheme
in Ihrem Verzeichnis aufgerufen wirdAndroidManifest.xml
:Erstellen Sie (falls noch nicht geschehen) eine
values/style.xml
Datei, die das von Ihrer Anwendung verwendete Thema überschreibt:und geben Sie Ihre Farben in Ihrer
values/colors.xml
Datei anUPDATE 2020
Da die obige Lösung die runde Ecke des Snackers entfernt, weil der Hintergrund auf diese Weise eingestellt wird, wird das alte Snackbar-Design verwendet, wenn Sie das Materialdesign beibehalten möchten, das Sie können.
ersetzen
android:background
durchandroid:backgroundTint
Wenn Sie auf API <21 abzielen, können Sie, wenn Sie sich für die Verwendung der Legacy-Snackbar für API <21 entscheiden, Ihr Abouve
MySnackbarStyle
im Ordner res / values-21 / festlegen und den vorherigen Legacy-Stil in Ihrem Ordner res / values belassen.Wenn Sie auf API <21 abzielen und den Materialstil der Snackbar auch in diesen niedrigeren API-Ebenen haben möchten, können Sie Ihren Snackbar-Stil in Ihren res / values / folgendermaßen ändern :
und leihen Sie Ihre
my_snackbar_background
aus dem offiziellen Repo auf diese Weise:Hier ist ein Spielplatz Repo .
quelle
my_snackbar_background
. Ohne es zeichnete Snackbar mit runderen Ecken.Kotlin-Version (mit Erweiterung ):
Erstellen Sie in einer Datei (zum Beispiel SnackbarExtension.kt) eine Erweiterung:
Als Nächstes können Sie in Ihrer Aktivität / Ihrem Fragment Folgendes tun:
quelle
Der folgende Code ist nützlich, um die Textfarbe der Nachricht zu ändern.
Zweiter Weg: Sie können die Farbe ändern, indem Sie auch das Thema der Aktivität ändern.
quelle
Es ist zu spät, aber falls jemand noch Hilfe braucht. Hier ist die Arbeitslösung.
quelle
Während der Arbeit mit xamarin android habe ich herausgefunden, dass ContextCompat.GetColor () Int zurückgibt, aber setBackgroundColor () einen Parameter vom Typ Color erwartet. Hier ist, wie ich es in meinem Xamarin-Android-Projekt zum Laufen gebracht habe.
quelle
Verwenden Sie mit der
Snackbar
in der Material Components Library enthaltenen Methode(com.google.android.material.snackbar.Snackbar
einfach diesetBackgroundTint
Methode.quelle
Ich habe eine kleine Utensilienklasse gemacht, damit ich einfach benutzerdefinierte farbige Snackbars über die App erstellen kann.
dann, um es zu verwenden, so wie überall in der App:
quelle
Setzen Sie es in eine Utility-Klasse:
Verwenden Sie wie folgt:
quelle
Grundsätzlich haben die angebotenen Lösungen einen Nachteil. Sie ändern die Form der Snackbar und entfernen den Radius.
Ich persönlich bevorzuge so etwas
quelle
Keine der anderen Lösungen hat bei mir wirklich funktioniert. Wenn ich nur die Hintergrundfarbe von Snackbar einstelle, hat das Layout unter TextView und Button die Standardfarbe. Wenn ich den Hintergrund von TextView einstelle, blinkt es ein wenig, nachdem SnackBar angezeigt wurde. Das Layout der Schaltfläche war immer noch in der Standardfarbe.
Am Ende fand ich heraus, dass der beste Weg für mich darin besteht, die Hintergrundfarbe von TextViews Eltern (SnackbarContentLayout) zu ändern. Jetzt ist die gesamte Snackbar richtig gefärbt und blinkt nicht, wenn sie angezeigt wird.
quelle
setBackgroundResource()
funktioniert genauso gut.quelle
Ich weiß nicht, warum setBackgroundColor () in meinem Projekt nicht gefunden wurde. Aus diesem Grund habe ich eine Erweiterungsfunktion erstellt, die jetzt in Ordnung ist.
und nenne es wie unten
activity_login.xml
LoginActivity.kt
quelle
}}
quelle