Szukaj…


Składnia

  • Marka Snackbar (Wyświetl widok, tekst CharSequence, czas trwania int)
  • Marka Snackbar (Wyświetl widok, int resId, int czas trwania)

Parametry

Parametr Opis
widok Widok: widok, w którym można znaleźć rodzica.
tekst CharSequence: tekst do wyświetlenia. Można sformatować tekst.
Resid int: identyfikator zasobu używanego zasobu łańcuchowego. Można sformatować tekst.
Trwanie int: Jak długo wyświetlać wiadomość. Może to być LENGTH_SHORT, LENGTH_LONG lub LENGTH_INDEFINITE

Uwagi

Snackbar zapewnia lekką informację zwrotną na temat operacji. Wyświetla krótką wiadomość na dole ekranu na telefonie komórkowym i na dole po lewej na większych urządzeniach. Paski przekąskowe pojawiają się ponad wszystkimi innymi elementami na ekranie i jednocześnie może być wyświetlany tylko jeden element.

Znikają automatycznie po upływie limitu czasu lub po interakcji użytkownika w innym miejscu ekranu, szczególnie po interakcjach wywołujących nową powierzchnię lub aktywność. Snackbar może być przesunięty poza ekran.

Przed użyciem SnackBar należy dodać zależność biblioteki obsługi projektu w pliku build.gradle :

dependencies {
    compile 'com.android.support:design:25.3.1'
}

Oficjalna dokumentacja

https://developer.android.com/reference/android/support/design/widget/Snackbar.html

Tworzenie prostego paska przekąsek

Tworzenie Snackbar można wykonać w następujący sposób:

Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG).show();

view służy do znalezienia odpowiedniego rodzica do wyświetlenia Snackbar . Zazwyczaj jest to układ CoordinatorLayout zdefiniowany w pliku XML, który umożliwia dodawanie funkcji, takich jak przeciąganie, aby zamknąć i automatycznie przenosić inne widżety (np. FloatingActionButton ). Jeśli nie ma układu CoordinatorLayout używany jest widok zawartości dekoru okna.

Bardzo często dodajemy również akcję do Snackbar . Typowym przypadkiem użycia byłoby działanie „Cofnij”.

Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG)
        .setAction("UNDO", new View.OnClickListener() {
            @Override
               public void onClick(View view) {
                   // put your logic here

               }
         })
        .show();

Możesz utworzyć Snackbar i pokazać go później:

Snackbar snackbar = Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG); 
snackbar.show();

Jeśli chcesz zmienić kolor tekstu Snackbar :

Snackbar snackbar = Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG);
View view = snackbar .getView();
TextView textView = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.parseColor("#FF4500"));
snackbar.show();

Domyślnie Snackbar zwalnia po swoim przesunięciu w prawo. W tym przykładzie pokazano, jak wyłączyć pasek przekąsek po przesunięciu w lewo .

Niestandardowy pasek przekąsek

Funkcja dostosowywania paska przekąskowego

public static Snackbar makeText(Context context, String message, int duration) {
        Activity activity = (Activity) context;
        View layout;
        Snackbar snackbar = Snackbar
                .make(activity.findViewById(android.R.id.content), message, duration);
        layout = snackbar.getView();
        //setting background color
        layout.setBackgroundColor(context.getResources().getColor(R.color.orange));
        android.widget.TextView text = (android.widget.TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
        //setting font color
        text.setTextColor(context.getResources().getColor(R.color.white));
        Typeface font = null;
        //Setting font 
        font = Typeface.createFromAsset(context.getAssets(), "DroidSansFallbackanmol256.ttf");
        text.setTypeface(font);
        return snackbar;

    }

Wywołaj funkcję z fragmentu lub aktywności

 SnackBar.makeText(MyActivity.this, "Please Locate your address at Map", Snackbar.LENGTH_SHORT).show();

Snackbar z oddzwanianiem

Możesz użyć Snackbar.Callback, aby nasłuchiwać, czy pasek przekąsk został usunięty przez użytkownika lub upłynął limit czasu.

Snackbar.make(getView(), "Hi snackbar!", Snackbar.LENGTH_LONG).setCallback( new Snackbar.Callback() {
                @Override
                public void onDismissed(Snackbar snackbar, int event) {
                    switch(event) {
                        case Snackbar.Callback.DISMISS_EVENT_ACTION:
                            Toast.makeText(getActivity(), "Clicked the action", Toast.LENGTH_LONG).show();
                            break;
                        case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:
                            Toast.makeText(getActivity(), "Time out", Toast.LENGTH_LONG).show();
                            break;
                    }
                }

                @Override
                public void onShown(Snackbar snackbar) {
                    Toast.makeText(getActivity(), "This is my annoying step-brother", Toast.LENGTH_LONG).show();
                }
            }).setAction("Go!", new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            }).show();

Niestandardowy pasek przekąsek

W tym przykładzie pokazano biały pasek przekąsek z niestandardową ikoną Cofnij.

Snackbar customBar = Snackbar.make(view , "Text to be displayed", Snackbar.LENGTH_LONG);
customBar.setAction("UNDO", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    //Put the logic for undo button here

    }
});

View sbView = customBar.getView();
//Changing background to White
sbView.setBackgroundColor(Color.WHITE));

TextView snackText = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
if (snackText!=null) {
    //Changing text color to Black
   snackText.setTextColor(Color.BLACK);
}

TextView actionText = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_action);
if (actionText!=null) {
    // Setting custom Undo icon
    actionText.setCompoundDrawablesRelativeWithIntrinsicBounds(R.drawable.custom_undo, 0, 0, 0);
}
customBar.show();

Snackbar vs Toasts: Którego należy użyć?

Grzanki są zwykle używane, gdy chcemy wyświetlić użytkownikowi informacje dotyczące niektórych działań, które zakończyły się pomyślnie (lub nie), a to działanie nie wymaga od użytkownika podjęcia żadnych innych działań. Na przykład, gdy wiadomość została wysłana, na przykład:

Toast.makeText(this, "Message Sent!", Toast.LENGTH_SHORT).show();

Przekąski służą również do wyświetlania informacji. Ale tym razem możemy dać użytkownikowi możliwość podjęcia działania. Załóżmy na przykład, że użytkownik przez pomyłkę usunął zdjęcie i chce je odzyskać. Możemy dostarczyć Snackbar z akcją „Cofnij”. Lubię to:

Snackbar.make(getCurrentFocus(), "Picture Deleted", Snackbar.LENGTH_SHORT)
        .setAction("Undo", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Return his picture
            }
        })
        .show();

Wniosek: Tosty są używane, gdy nie potrzebujemy interakcji użytkownika. Paski przekąskowe pozwalają użytkownikom podjąć inną akcję lub cofnąć poprzednią.

Niestandardowy pasek przekąsek (bez widoku)

Tworząc Snackbar bez konieczności przejścia widoku do Snackbar, cały układ tworzymy w Androidzie w android.R.id.content.

public class CustomSnackBar {

    public static final int STATE_ERROR = 0;
    public static final int STATE_WARNING = 1;
    public static final int STATE_SUCCESS = 2;
    public static final int VIEW_PARENT = android.R.id.content;

    public CustomSnackBar(View view, String message, int actionType) {
        super();

        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG);
        View sbView = snackbar.getView();
        TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
        textView.setTextColor(Color.parseColor("#ffffff"));
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
        textView.setGravity(View.TEXT_ALIGNMENT_CENTER);
        textView.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

        switch (actionType) {
            case STATE_ERROR:
                snackbar.getView().setBackgroundColor(Color.parseColor("#F12B2B"));
                break;
            case STATE_WARNING:
                snackbar.getView().setBackgroundColor(Color.parseColor("#000000"));
                break;
            case STATE_SUCCESS:
                snackbar.getView().setBackgroundColor(Color.parseColor("#7ED321"));
                break;
        }
        snackbar.show();
    }
}

dla klasy połączeń

nowy CustomSnackBar (findViewById (CustomSnackBar.VIEW_PARENT), „wiadomość”, CustomSnackBar.STATE_ERROR);



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow