Register now for Android Dev Summit 2019!

Toasts – Übersicht

Ein Toast gibt eine einfache Rückmeldung zu einem Vorgang in einem kleinen Pop-up-Fenster. Er nimmt nur so viel Platz ein, dass die aktuelle Aktivität weiterhin sichtbar und interaktiv bleibt. Toasts verschwinden nach einer bestimmten Zeit automatisch.

Wenn Sie beispielsweise in einer E-Mail auf Senden klicken, wird der Toast "Nachricht wird gesendet…" angezeigt, wie auf der folgenden Abbildung zu sehen:

Wenn eine Nutzerantwort auf eine Statusmeldung erforderlich ist, sollten Sie stattdessen eine Benachrichtigung verwenden.

Die Grundlagen

Instanziieren Sie zuerst ein Toast-Objekt mit einer der makeText()-Methoden. Diese Methode berücksichtigt drei Parameter: den Context der Anwendung, die Textnachricht und die Dauer des Toasts. Sie gibt ein ordnungsgemäß initialisiertes Toast-Objekt zurück. Sie können sich die Toast-Benachrichtigung mit show() ansehen, wie im folgenden Beispiel dargestellt:

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

In diesem Beispiel ist alles enthalten, was Sie für die meisten Toast-Benachrichtigungen benötigen. Abweichungen davon sollten die Ausnahme sein. Wenn Sie den Toast jedoch anders positionieren oder Ihr eigenes Layout statt einer einfachen Textnachricht verwenden möchten, ist auch das möglich. In den folgenden Abschnitten wird beschrieben, wie Sie diese Änderungen vornehmen.

Sie können Ihre Methoden auch verketten und eine Beibehaltung des Toast-Objekts auf diese Weise verhindern:

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

Toast positionieren

Eine standardmäßige Toast-Benachrichtigung wird unten auf dem Bildschirm horizontal zentriert angezeigt. Sie können diese Position mit der Methode setGravity(int, int, int) ändern. Sie akzeptiert drei Parameter: eine Gravity-Konstante, einen X-Positionsversatz und einen Y-Positionsversatz.

Wenn der Toast z. B. links oben angezeigt werden soll, können Sie die Konstante so festlegen:

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

    toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
    

Wenn Sie die Position nach rechts verschieben möchten, erhöhen Sie den Wert des zweiten Parameters. Soll sie nach unten verschoben werden, erhöhen Sie den Wert des letzten Parameters.

Benutzerdefinierte Toast-Ansicht erstellen

Wenn eine einfache Textnachricht nicht ausreicht, können Sie ein benutzerdefiniertes Layout für Ihre Toast-Benachrichtigung erstellen. Definieren Sie dazu ein View-Layout in XML oder dem Code Ihrer Anwendung und übergeben Sie das Stamm-View-Objekt an die Methode setView(View).

Das folgende Snippet enthält ein benutzerdefiniertes Layout für eine Toast-Benachrichtigung (gespeichert als layout/custom_toast.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

Beachten Sie, dass die ID des LinearLayout-Elements "custom_toast_container" ist. Sie müssen diese ID und die ID der XML-Layoutdatei "custom_toast" verwenden, um das Layout wie hier gezeigt einem Inflate-Vorgang zu unterziehen:

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
    

Rufen Sie zuerst den LayoutInflater mit getLayoutInflater() oder getSystemService() ab und führen Sie für das Layout anschließend einen Inflate-Vorgang über XML mithilfe von inflate(int, ViewGroup) aus. Der erste Parameter ist die Layoutressourcen-ID und der zweite die Stamm-View. Sie können dieses Inflate-Layout verwenden, um weitere View-Objekte im Layout zu finden. Erfassen und definieren Sie also nun den Inhalt für die Elemente ImageView und TextView. Erstellen Sie schließlich einen neuen Toast mit Toast(Context) und legen Sie einige Eigenschaften des Toasts fest, z. B. die Ausrichtung und die Dauer. Rufen Sie dann setView(View) auf und übergeben Sie sie an das Inflate-Layout. Sie können den Toast mit Ihrem benutzerdefinierten Layout jetzt ansehen, indem Sie show() aufrufen.

Hinweis: Verwenden Sie für einen Toast nicht den öffentlichen Konstruktor, wenn Sie das Layout nicht mit setView(View) definieren. Wenn Sie kein benutzerdefiniertes Layout haben, müssen Sie makeText(Context, int, int) verwenden, um den Toast zu erstellen.