Suche…


Einführung

Ein Toast bietet ein einfaches Feedback zu einer Operation in einem kleinen Popup und verschwindet nach einem Timeout automatisch. Es füllt nur den für die Nachricht erforderlichen Platz aus und die aktuelle Aktivität bleibt sichtbar und interaktiv.

Syntax

  • Toast makeText (Kontextkontext, CharSequence-Text, int duration)
  • Toast makeText (Kontextkontext, int resId, int duration)
  • void setGravity (int Schwerkraft, int xOffset, int yOffset)
  • void show ()

Parameter

Parameter Einzelheiten
Kontext Der Kontext, in dem Ihr Toast angezeigt werden soll. this wird üblicherweise in einer Aktivität verwendet und getActivity() in einem Fragment
Text Eine Zeichenfolge, die angibt, welcher Text im Toast angezeigt wird. Jedes Objekt, das CharSequence implementiert, kann verwendet werden, einschließlich einer Zeichenfolge
resId Eine Ressourcen-ID, mit der eine Ressourcenzeichenfolge zur Anzeige im Toast bereitgestellt werden kann
Dauer Integer-Flag, das angibt, wie lange der Toast angezeigt wird. Optionen sind Toast.LENGTH_SHORT und Toast.LENGTH_LONG
Schwere Ganzzahl, die die Position oder "Schwerkraft" des Toasts angibt. Siehe Optionen hier
xOffset Bestimmt den horizontalen Versatz für die Toast-Position
yOffset Legt den vertikalen Versatz für die Toast-Position fest

Bemerkungen

Ein Toast bietet ein einfaches Feedback zu einer Operation in einem kleinen Popup. Es füllt nur den für die Nachricht erforderlichen Platz aus und die aktuelle Aktivität bleibt sichtbar und interaktiv.

Eine neuere Alternative zu Toast ist SnackBar. SnackBar bietet einen aktualisierten visuellen Stil und ermöglicht es dem Benutzer, die Nachricht zu verwerfen oder weitere Maßnahmen zu ergreifen. Einzelheiten finden Sie in der SnackBar- Dokumentation.

Offizielle Dokumentation:

https://developer.android.com/reference/android/widget/Toast.html

Position eines Toast einstellen

Eine standardmäßige Toastbenachrichtigung wird unten im Bildschirm in horizontaler Mitte angezeigt. Diese Position können Sie mit setGravity(int, int, int) ändern. Dies akzeptiert drei Parameter: eine Schwerkraftkonstante, einen X-Positionsversatz und einen Y-Positionsversatz.

Wenn Sie beispielsweise entscheiden, dass der Toast in der oberen linken Ecke angezeigt werden soll, können Sie die Schwerkraft wie folgt einstellen:

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

Anzeige einer Toast-Nachricht

In Android ist ein Toast ein einfaches UI-Element, das verwendet werden kann, um einem Benutzer kontextabhängiges Feedback zu geben.

Um eine einfache Toast-Nachricht anzuzeigen, können wir Folgendes tun.

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

Oder, um einen Toast-Inline-Eintrag anzuzeigen, ohne sich an dem Toast-Objekt festzuhalten, können Sie:

Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();

WICHTIG: Stellen Sie sicher, dass die show() -Methode vom UI-Thread aufgerufen wird. Wenn Sie versuchen, einen Toast aus einem anderen Thread runOnUiThread können Sie z. B. die runOnUiThread Methode einer Activity .

Andernfalls, dh der Versuch, die Benutzeroberfläche durch Erstellen eines Toast zu ändern, RuntimeException eine RuntimeException die wie folgt aussieht:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Die einfachste Möglichkeit, diese Ausnahme zu behandeln, ist die Verwendung von runOnUiThread: Die Syntax wird unten gezeigt.

   runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Your code here
        }
    });

Einen benutzerdefinierten Toast erstellen

Wenn Sie die standardmäßige Toast-Ansicht nicht verwenden möchten, können Sie mit der setView(View) -Methode für ein Toast Objekt eine eigene setView(View) .

Erstellen Sie zunächst das XML-Layout, das Sie in Ihrem Toast verwenden möchten.

<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>

Wenn Sie dann Ihren Toast erstellen, blasen Sie Ihre benutzerdefinierte Ansicht aus XML auf und rufen Sie 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();

Thread-sichere Anzeige von 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();
                }
            }
        });
    }

Denken Sie daran, MainApplication im manifest hinzuzufügen.

Rufen Sie es jetzt in einem beliebigen Thread auf, um eine Toastnachricht anzuzeigen.

MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);

Toastmeldung über der Soft-Tastatur anzeigen

Standardmäßig zeigt Android Toast-Meldungen am unteren Bildschirmrand an, auch wenn die Tastatur angezeigt wird. Dies zeigt eine Toast-Nachricht direkt über der Tastatur.

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-sichere Methode zum Anzeigen einer Toast-Nachricht (für AsyncTask)

Wenn Sie Application nicht erweitern möchten und den Toastnachrichten-Thread sicher aufbewahren möchten, stellen Sie sicher, dass Sie sie im Abschnitt "Nach der Ausführung" Ihrer AsyncTasks anzeigen.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow