Sök…


Introduktion

En toast ger enkel feedback om en operation i en liten popup och försvinner automatiskt efter en timeout. Det fyller bara den mängd utrymme som krävs för meddelandet och den aktuella aktiviteten förblir synlig och interaktiv.

Syntax

  • Toast makeText (Context context, CharSequence text, int Duration)
  • Toast makeText (Context context, int resId, int Duration)
  • void setGravity (int gravity, int xOffset, int yOffset)
  • void show ()

parametrar

Parameter detaljer
sammanhang Det sammanhang som ska visas din Toast i. this används vanligtvis i en aktivitet och getActivity() används vanligtvis i ett fragment
text En CharSequence som anger vilken text som ska visas i Toast. Alla objekt som implementerar CharSequence kan användas, inklusive en sträng
Resid Ett resurs-ID som kan användas för att tillhandahålla en resurssträng som ska visas i toasten
varaktighet Heltalsflagg som representerar hur länge toasten kommer att visas. Alternativ är Toast.LENGTH_SHORT och Toast.LENGTH_LONG
allvar Heltal som anger positionen, eller "gravitationen" för toasten. Se alternativ här
XOffset Anger den horisontella förskjutningen för toastpositionen
'Yoffset' Anger den vertikala förskjutningen för toastpositionen

Anmärkningar

En rostat bröd ger enkel feedback om en operation i en liten popup. Det fyller bara den mängd utrymme som krävs för meddelandet och den aktuella aktiviteten förblir synlig och interaktiv.

Ett nyare alternativ till Toast är SnackBar. SnackBar erbjuder en uppdaterad visuell stil och gör att användaren kan avvisa meddelandet eller vidta ytterligare åtgärder. Se dokumentationen för SnackBar för mer information.

Officiell dokumentation:

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

Ställ in en rostat bröd

En vanlig toastmeddelande visas längst ner på skärmen i linje i horisontellt centrum. Du kan ändra denna position med setGravity(int, int, int) . Detta accepterar tre parametrar: en Gravitykonstant, en X-position offset och en y-position offset.

Om du till exempel bestämmer dig för att rostat bröd ska visas i det övre vänstra hörnet kan du ställa in tyngdkraften så här:

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

Visar ett toastmeddelande

I Android är Toast ett enkelt användargränssnitt som kan användas för att ge kontextuell feedback till en användare.

För att visa ett enkelt toastmeddelande kan vi göra följande.

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

Eller, för att visa en Toast inline, utan att hålla fast vid Toast-objektet kan du:

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

VIKTIGT: Se till att show() metoden anropas från UI-tråden. Om du försöker visa en Toast från en annan tråd kan exempelvis använda runOnUiThread metod en Activity .

Om du inte gör det, vilket innebär att du försöker ändra användargränssnittet genom att skapa en RuntimeException , kommer det att kasta en RuntimeException som ser ut så här:

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

Det enklaste sättet att hantera detta undantag är bara genom att använda runOnUiThread: syntax visas nedan.

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

Skapa en anpassad toast

Om du inte vill använda standarden Toast-vyn kan du ge din egen med setView(View) på ett Toast objekt.

Skapa först den XML-layout som du vill använda i din rostat bröd.

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

När du skapar din rostat bröd, blåsa sedan upp din anpassade vy från XML och ring 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();

Trådsäker sätt att visa rostat bröd (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();
                }
            }
        });
    }

Kom ihåg att lägga till MainApplication i manifest .

Nu kan du ringa det från valfri tråd för att visa ett toastmeddelande.

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

Visa rostat brödmeddelande ovanför mjukt tangentbord

Som standard visar Android Toast-meddelanden längst ner på skärmen även om tangentbordet visas. Detta visar ett Toast-meddelande precis ovanför tangentbordet.

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

Trådssäkert sätt att visa ett rostat brödmeddelande (för AsyncTask)

Om du inte vill förlänga applikationen och hålla dina toastmeddelanden säkra i tråden, se till att du visar dem i avsnittet för exekvering av posten i dina 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow