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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow