Android
Crostini
Ricerca…
introduzione
Un toast fornisce un feedback semplice su un'operazione in un piccolo popup e scompare automaticamente dopo un timeout. Riempie solo la quantità di spazio richiesta per il messaggio e l'attività corrente rimane visibile e interattiva.
Sintassi
- Toast makeText (Contesto contesto, testo CharSequence, durata int)
- Toast makeText (Contesto contesto, int resId, int durata)
- void setGravity (int gravity, int xOffset, int yOffset)
- void show ()
Parametri
Parametro | Dettagli |
---|---|
contesto | Il contesto per visualizzare il tuo Toast in. this è comunemente usato in un'attività e getActivity() è comunemente usato in un frammento |
testo | Un CharSequence che specifica quale testo verrà mostrato nel Toast. È possibile utilizzare qualsiasi oggetto che implementa CharSequence, inclusa una stringa |
resid | Un ID risorsa che può essere utilizzato per fornire una risorsa Stringa da visualizzare nel Toast |
durata | Flag di interi che rappresentano per quanto tempo il Toast mostrerà. Le opzioni sono Toast.LENGTH_SHORT e Toast.LENGTH_LONG |
gravità | Numero intero che specifica la posizione, o "gravità" del pane tostato. Vedi le opzioni qui |
xOffset | Specifica l'offset orizzontale per la posizione Toast |
YOffset | Specifica l'offset verticale per la posizione di Toast |
Osservazioni
Un brindisi fornisce un semplice feedback su un'operazione in un piccolo popup. Riempie solo la quantità di spazio richiesta per il messaggio e l'attività corrente rimane visibile e interattiva.
Un'alternativa più recente a Toast è SnackBar. SnackBar offre uno stile visivo aggiornato e consente all'utente di ignorare il messaggio o intraprendere ulteriori azioni. Vedere la documentazione SnackBar per i dettagli.
Documentazione ufficiale:
https://developer.android.com/reference/android/widget/Toast.html
Imposta la posizione di un toast
Una notifica standard per il brindisi appare nella parte inferiore dello schermo allineata al centro orizzontale. Puoi cambiare questa posizione con setGravity(int, int, int)
. Questo accetta tre parametri: una costante di gravità, uno spostamento di posizione x e uno spostamento di posizione y.
Ad esempio, se decidi che il toast dovrebbe apparire nell'angolo in alto a sinistra, puoi impostare la gravità in questo modo:
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
Mostrare un messaggio Toast
In Android, un Toast è un semplice elemento dell'interfaccia utente che può essere utilizzato per fornire un feedback contestuale a un utente.
Per visualizzare un semplice messaggio di Toast, possiamo fare quanto segue.
// Declare the parameters to use for the Toast
Context context = getApplicationContext();
// in an Activity, you may also use "this"
// in a fragment, you can use getActivity()
CharSequence message = "I'm an Android Toast!";
int duration = Toast.LENGTH_LONG; // Toast.LENGTH_SHORT is the other option
// Create the Toast object, and show it!
Toast myToast = Toast.makeText(context, message, duration);
myToast.show();
Oppure, per mostrare un Toast in linea, senza aggrapparti all'oggetto Toast puoi:
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
IMPORTANTE: assicurati che il metodo show()
sia chiamato dal thread dell'interfaccia utente. Se stai cercando di mostrare un Toast
da un thread diverso è possibile ad esempio utilizzare runOnUiThread
metodo di un Activity
.
Non riuscendo a farlo, il che significa provare a modificare l'interfaccia utente creando un Toast, genererà una RuntimeException
che avrà il seguente aspetto:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Il modo più semplice per gestire questa eccezione è semplicemente usando runOnUiThread: la sintassi è mostrata di seguito.
runOnUiThread(new Runnable() {
@Override
public void run() {
// Your code here
}
});
Creare un Toast personalizzato
Se non si desidera utilizzare la vista Toast predefinita, è possibile fornire la propria utilizzando il setView(View)
su un oggetto Toast
.
Innanzitutto, crea il layout XML che vorresti usare nel tuo Toast.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toast_layout_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="8dp"
android:background="#111">
<TextView android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
<TextView android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"/>
</LinearLayout>
Quindi, quando crei il tuo Toast, gonfia la tua vista personalizzata da XML e chiama setView
// Inflate the custom view from XML
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
// Set the title and description TextViews from our custom layout
TextView title = (TextView) layout.findViewById(R.id.title);
title.setText("Toast Title");
TextView description = (TextView) layout.findViewById(R.id.description);
description.setText("Toast Description");
// Create and show the Toast object
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
Modo sicuro per la visualizzazione dei thread Toast (Application Wide)
public class MainApplication extends Application {
private static Context context; //application context
private Handler mainThreadHandler;
private Toast toast;
public Handler getMainThreadHandler() {
if (mainThreadHandler == null) {
mainThreadHandler = new Handler(Looper.getMainLooper());
}
return mainThreadHandler;
}
@Override public void onCreate() {
super.onCreate();
context = this;
}
public static MainApplication getApp(){
return (MainApplication) context;
}
/**
* Thread safe way of displaying toast.
* @param message
* @param duration
*/
public void showToast(final String message, final int duration) {
getMainThreadHandler().post(new Runnable() {
@Override
public void run() {
if (!TextUtils.isEmpty(message)) {
if (toast != null) {
toast.cancel(); //dismiss current toast if visible
toast.setText(message);
} else {
toast = Toast.makeText(App.this, message, duration);
}
toast.show();
}
}
});
}
Ricordati di aggiungere MainApplication
in manifest
.
Ora chiamalo da qualsiasi thread per visualizzare un messaggio di brindisi.
MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);
Mostra il messaggio Toast sopra la tastiera Soft
Per impostazione predefinita, Android visualizza i messaggi Toast nella parte inferiore dello schermo, anche se la tastiera è visualizzata. Questo mostrerà un messaggio Toast appena sopra la tastiera.
public void showMessage(final String message, final int length) {
View root = findViewById(android.R.id.content);
Toast toast = Toast.makeText(this, message, length);
int yOffset = Math.max(0, root.getHeight() - toast.getYOffset());
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, yOffset);
toast.show();
}
Thread modo sicuro di visualizzare un messaggio Toast (per AsyncTask)
Se non vuoi estendere l'applicazione e mantenere i thread dei tuoi toast sicuri, assicurati di mostrarli nella sezione post execute dei tuoi AsyncTasks.
public class MyAsyncTask extends AsyncTask <Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Do your background work here
}
@Override
protected void onPostExecute(Void aVoid) {
// Show toast messages here
Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();
}
}