Android
Snack bar
Ricerca…
Sintassi
- Snackbar make (Visualizza vista, testo CharSequence, durata int)
- Snackbar make (Visualizza vista, int resId, int duration)
Parametri
Parametro | Descrizione |
---|---|
vista | Visualizza: la vista per trovare un genitore da. |
testo | CharSequence: il testo da mostrare. Può essere il testo formattato |
resid | int: l'ID risorsa della risorsa stringa da utilizzare. Può essere il testo formattato |
durata | int: Quanto tempo è necessario per visualizzare il messaggio. Questo può essere LENGTH_SHORT, LENGTH_LONG o LENGTH_INDEFINITE |
Osservazioni
Snackbar fornisce un feedback leggero su un'operazione. Visualizza un breve messaggio nella parte inferiore dello schermo su dispositivo mobile e in basso a sinistra su dispositivi più grandi. Gli snack spuntano sopra tutti gli altri elementi sullo schermo e solo uno può essere visualizzato alla volta.
Scompaiono automaticamente dopo un timeout o dopo l'interazione dell'utente altrove sullo schermo, in particolare dopo le interazioni che evocano una nuova superficie o attività. Lo snack bar può essere cancellato dallo schermo.
Prima di utilizzare SnackBar
è necessario aggiungere la dipendenza della libreria del supporto di progettazione nel file build.gradle
:
dependencies {
compile 'com.android.support:design:25.3.1'
}
Documentazione ufficiale
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Creare un semplice snack bar
La creazione di uno Snackbar
può essere eseguita come segue:
Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG).show();
La view
viene utilizzata per trovare un genitore adatto da utilizzare per visualizzare lo Snackbar
. Normalmente questo sarebbe un CoordinatorLayout
che hai definito nel tuo XML, che abilita l'aggiunta di funzionalità come swipe per chiudere e spostare automaticamente altri widget (ad es. FloatingActionButton
). Se non c'è alcun CoordinatorLayout
viene utilizzata la vista del contenuto della decorazione della finestra.
Molto spesso aggiungiamo anche un'azione allo Snackbar
. Un caso di uso comune sarebbe un'azione "Annulla".
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();
Puoi creare uno Snackbar
e mostrarlo in un secondo momento:
Snackbar snackbar = Snackbar.make(view, "Text to display", Snackbar.LENGTH_LONG);
snackbar.show();
Se vuoi cambiare il colore del testo di 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();
Per impostazione predefinita, Snackbar
si chiude con il tasto destro del mouse. Questo esempio mostra come eliminare lo snackBar sul suo swipe sinistro .
Snack Bar personalizzato
Funzione per personalizzare lo snack bar
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;
}
Chiama la funzione dal frammento o dall'attività
SnackBar.makeText(MyActivity.this, "Please Locate your address at Map", Snackbar.LENGTH_SHORT).show();
Snackbar con callback
Puoi utilizzare Snackbar.Callback per ascoltare se la barra degli snack è stata chiusa dall'utente o dal timeout.
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();
Snackbar personalizzato
Questo esempio mostra uno Snackbar bianco con l'icona di annullamento personalizzata.
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 toast: quale dovrei usare?
I toast sono generalmente utilizzati quando vogliamo mostrare all'utente informazioni relative ad alcune azioni che hanno avuto successo (o meno) e questa azione non richiede all'utente di intraprendere altre azioni. Come quando un messaggio è stato inviato, ad esempio:
Toast.makeText(this, "Message Sent!", Toast.LENGTH_SHORT).show();
Gli snack vengono anche utilizzati per visualizzare un'informazione. Ma questa volta, possiamo dare all'utente la possibilità di agire. Ad esempio, diciamo che l'utente ha cancellato un'immagine per errore e vuole recuperarlo. Possiamo fornire uno Snackbar con l'azione "Annulla". Come questo:
Snackbar.make(getCurrentFocus(), "Picture Deleted", Snackbar.LENGTH_SHORT)
.setAction("Undo", new View.OnClickListener() {
@Override
public void onClick(View view) {
//Return his picture
}
})
.show();
Conclusione: i toast vengono utilizzati quando non è necessaria l'interazione dell'utente. Gli snack vengono utilizzati per consentire agli utenti di eseguire un'altra azione o annullare una precedente.
Snackbar personalizzato (non serve visualizzare)
Creazione di uno snack senza la necessità di passare la vista a Snackbar, tutti i layout creano in Android in 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();
}
}
per call class
nuovo CustomSnackBar (findViewById (CustomSnackBar.VIEW_PARENT), "message", CustomSnackBar.STATE_ERROR);