50

Ich zeige snackbar in DialogFragment Innerhalb des positiven klicks von alertDialog. Hier ist mein Codeausschnitt.Wie ändere ich die Hintergrundfarbe der Snackbar?

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

I Ansicht des dialogfragment auf die Snackbar am vorbei. Ich möchte die Hintergrundfarbe schwarz? Wie kann ich das machen? Ich gebe AlertDialog im DialogFragment zurück. Und das Thema, das ich in den Dialog setze wie folgt der

<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 Hintergrundfarbe für den Dialog auf weiß setze es, indem die Hintergrundfarbe der snackbar außer Kraft setzen sollte.

+2

[http://www.technotalkative.com/part-3-styling-snackbar/](http://www.technotalkative.com/part-3-styling-snackbar/) versucht –

+0

, dass bereits nicht helfen mir ... Ich nenne Snackbar aus dem Dialog Fragment + alertDialog drin und ich übergebe positive Schaltfläche Klick auf die Snackbar – Ajinkya

Antwort

90

Versuchen Sie Hintergrundfarbe wie diese Einstellung:

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

Es wird zu 100% arbeiten!

+26

übergeben werden müssen Sie 'snackBarView.getView(). SetBackgrondColor (ContextCompat.getColor (getActivity(), R.color.BLACK));' – jaytj95

+0

Es funktioniert so wie es sollte. – Klevi01

+0

Wenn Sie diese Seite von Google gefunden haben und die obige Lösung nicht für Sie funktionierte, müssen Sie diese stattdessen versuchen: 'sbView.setBackgroundColor (getResources(). GetColor (R.color.BLACK))' – modu

58

Sie können es tun, wie diese

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

, wie Sie sehen können, ich tat genau das gleiche, aber es zeigt nicht in schwarzer Farbe – Ajinkya

+0

ich habe Verwenden Sie dasselbe in einem meiner Projekte, versuchen Sie es in Aktivität zum Testen anzuzeigen, möglicherweise funktioniert es nicht aufgrund von Dialog –

+0

ya es arbeitet an Aktivität, aber ich will es auf dem Dialogfragment. – Ajinkya

11

Der folgende Code 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(); 

Zweiter Weg: Sie können die Farbe ändern, indem auch Thema der Aktivität zu verändern.

1

Ich habe ein wenig Gebrauchsklasse 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, es zu benutzen, wie diese, wo jeder in der App:

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

es Klasse in einer Utility-Put:

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

wie folgt aus:

Utility.showSnackBar(getApplicationContext(), findViewById(android.R.id.content), "Add success!!!"); 
0
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(); 
} 

}

1

Es ist zu spät, aber falls jemand noch 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();