webentwicklung-frage-antwort-db.com.de

Wie kann ich die Hintergrundfarbe der Snackbar ändern?

Ich zeige eine Snackbar in DialogFragment. Im Positiv-Klick von alertDialog. Hier ist mein Code-Ausschnitt.

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();

 As u can see my snackbars background color showing white color

Ich übergebe die Ansicht des Dialogfragments an die Snackbar. Ich möchte die Hintergrundfarbe schwarz? Wie kann ich das machen? Ich rufe alertDialog in das DialogFragment zurück. Und das Thema, das ich dem Dialog wie folgt vorstelle

<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ß gesetzt habe, sollte sie die Hintergrundfarbe auf die Snackbar setzen.

70
Ajinkya

Stellen Sie die Hintergrundfarbe wie folgt ein:

sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));

Es wird 100% funktionieren! 

121

sie können es so machen

Snackbar snackbar;
snackbar = Snackbar.make(view, "Message", Snackbar.LENGTH_SHORT);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(yourColor);
TextView textView = (TextView) snackBarView.findViewById(Android.support.design.R.id.snackbar_text);
textView.setTextColor(textColor);
snackbar.show();
72
Zubair Akber

Wenn Sie für alle Snackbars eine Hintergrundfarbe definieren möchten, überschreiben Sie einfach den design_snackbar_background_color-Wert irgendwo in Ihren Ressourcen. Zum Beispiel:

<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>
14
4emodan

Der Balgcode ist nützlich, um die Textfarbe der Nachricht zu ändern.

Snackbar snackbar = Snackbar.make(rootView, "Enter Your Message",Snackbar.LENGTH_SHORT);
View view = snackbar.getView();
TextView tv = (TextView)view.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.RED);
snackbar.show();

Zweite Möglichkeit: Sie können die Farbe ändern, indem Sie auch das Thema der Aktivität ändern.

12
Kailas Bhakade

Kotlin-Version (mit einer Erweiterung ):

Erstellen Sie in einer Datei (zum Beispiel Snackbar Extension.kt) eine Erweiterung:

fun Snackbar.withColor(@ColorInt colorInt: Int): Snackbar{
   this.view.setBackgroundColor(colorInt)
   return this
}

Als Nächstes können Sie in Ihrer Aktivität/Ihrem Fragment Folgendes ausführen:

Snackbar
  .make(coordinatorLayout, message, Snackbar.LENGTH_LONG)
  .withColor(YOUR_COLOR)
  .show()
8
Phil

Es ist zu spät, aber falls noch jemand Hilfe braucht. Hier ist die Arbeitslösung.

      Snackbar snackbar = Snackbar.make(mainView, text, Snackbar.LENGTH_LONG);
    View snackBarView = snackbar.getView();
    snackBarView.setBackgroundColor(context.getResources().getColor(R.color.btn_background_color));
    snackbar.show();
5
Nouman Ghaffar

Bei der Arbeit mit Xamarin Android habe ich herausgefunden, dass ContextCompat.GetColor () Int zurückgibt, der setBackgroundColor () jedoch einen Parameter vom Typ Color ..__ erwartet.

Snackbar snackbarview =  Snackbar.Make(toolbar, message, Snackbar.LengthLong);
View snckView = snackbarview.View;                
snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary)));
snackbarview.Show();
3

Fügen Sie es in eine Utility-Klasse ein:

public class Utility {
    public static void showSnackBar(Context context, View view, String text) {
        Snackbar sb = Snackbar.make(view, text, Snackbar.LENGTH_SHORT);
        sb.getView().setBackgroundColor(ContextCompat.getColor(context, R.color.colorAccent));
        sb.show();
    }
}

Verwendung wie folgt:

Utility.showSnackBar(getApplicationContext(), findViewById(Android.R.id.content), "Add success!!!");
2
s-hunter

Ich habe einen kleinen Utensilienkurs gemacht, so dass ich leicht benutzerdefinierte farbige Snackbars durch die App machen kann.

package com.yourapppackage.yourapp;

import Android.support.design.widget.Snackbar;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;

public class SnackbarUtils {

    private int BACKGROUND_COLOR;
    private int TEXT_COLOR;
    private int BUTTON_COLOR;
    private String TEXT;


    public SnackbarUtils(String aText, int aBgColor, int aTextColor, int aButtonColor){
        this.TEXT = aText;
        this.BACKGROUND_COLOR = aBgColor;
        this.TEXT_COLOR = aTextColor;
        this.BUTTON_COLOR = aButtonColor;
    }

    public Snackbar snackieBar(){
        Snackbar snackie = Snackbar.make(MainActivity.getInstance().findViewById(Android.R.id.content), TEXT, Snackbar.LENGTH_LONG);
        View snackView = snackie.getView();
        TextView snackViewText = (TextView) snackView.findViewById(Android.support.design.R.id.snackbar_text);
        Button snackViewButton = (Button) snackView.findViewById(Android.support.design.R.id.snackbar_action);
        snackView.setBackgroundColor(BACKGROUND_COLOR);
        snackViewText.setTextColor(TEXT_COLOR);
        snackViewButton.setTextColor(BUTTON_COLOR);
        return snackie;
    }
}

dann, um es zu verwenden, wie hier in der App:

new SnackbarUtils("This is the text displayed", Color.RED, Color.BLACK, Color.YELLOW).snackieBar().setAction("OTAY", v -> { 
     //donothing
     }).show();
2
buradd

Keine andere Lösung hat wirklich für mich funktioniert. Wenn ich nur die Hintergrundfarbe von Snackbar stelle, war das Layout unter TextView und Button in der Standardfarbe. Wenn ich den Hintergrund von TextView eingestellt habe, blinzelte es ein wenig, nachdem SnackBar gezeigt wurde. Das Layout um die Schaltfläche war immer noch in der Standardfarbe.

Am Ende habe ich herausgefunden, dass der beste Weg für mich die Hintergrundfarbe der übergeordneten TextView-Komponente (SnackbarContentLayout) ist. Jetzt ist die gesamte Snackbar richtig gefärbt und blinkt nicht, wenn sie angezeigt wird.

snack = Snackbar.make(view, text, duration)
View view = snack.getView();
view.setBackgroundColor(BACKGROUND_COLOR);
TextView tv = view.findViewById(Android.support.design.R.id.snackbar_text);
tv.setTextColor(TEXT_COLOR);
((SnackbarContentLayout) tv.getParent()).setBackgroundColor(BACKGROUND_COLOR);
0
Brontes

Grundsätzlich haben die angebotenen Lösungen einen Nachteil. Sie verändern die Form der Snackbar und entfernen den Radius.

Persönlich bevorzugen Sie so etwas

val snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
val view = snackbar.getView();
val color = view.resources.getColor(colorId)
view.background.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
0
Vaios
public class CustomBar {

public static void show(View view, String message, boolean isLong) {
    Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
    s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
    s.show();
}

public static void show(View view, @StringRes int message, boolean isLong) {
    Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
    s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
    s.show();
}

}

0
Stepan Mazokha

setBackgroundResource() funktioniert genauso gut.

Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
View sbView = snackbar.getView();
sbView.setBackgroundResource(R.color.background);
snackbar.show();
0
Maksim Ivanov

Da keine der anderen Antworten einen benutzerdefinierten Stil vorsah (der meiner Meinung nach eine der sichersten Methoden für das Update ist), poste ich hier meine Lösung.

Ich poste eine Lösung, die bereits das neue Thema AndroidX (support design 28) anspricht.

Vorausgesetzt, Ihre Anwendung verwendet eine benutzerdefinierte Calle MyAppTheme in Ihrem AndroidManifest.xml:

<application
        Android:name=".MyApplicationName"
        Android:allowBackup="true"
        Android:icon="@mipmap/icon"
        Android:roundIcon="@mipmap/icon_round"
        Android:label="@string/app_name"
        Android:theme="@style/MyAppTheme">

Erstellen Sie (falls noch nicht geschehen) eine values/style.xml-Datei, die das von Ihrer Anwendung verwendete Design überschreibt:

<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/myColorPrimary</item>
    <item name="colorPrimaryDark">@color/myColorPrimaryDark</item>
    <item name="colorAccent">@color/myColorAccent</item>
    <item name="snackbarStyle">@style/MySnackBarStyle</item>
</style>

<!-- snackbar style -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
    <item name="Android:background">@color/mySnackbarBackgroundColor</item>
</style>

und geben Sie Ihre Farben in Ihre values/colors.xml-Datei ein

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="myColorPrimary">#008577</color>
    <color name="myColorPrimaryDark">#00574B</color>
    <color name="myColorAccent">#D81B60</color>
    <color name="mySnackbarBackgroundColor">#D81B60</color>
</resources>
0
shadowsheep