Zoeken…


Invoering

Een Toast geeft eenvoudige feedback over een bewerking in een kleine pop-up en verdwijnt automatisch na een time-out. Het vult alleen de hoeveelheid ruimte die nodig is voor het bericht en de huidige activiteit blijft zichtbaar en interactief.

Syntaxis

  • Toast makeText (context, CharSequence-tekst, int duur)
  • Toast makeText (context, int resId, int duur)
  • void setGravity (int zwaartekracht, int xOffset, int yOffset)
  • ongeldige show ()

parameters

Parameter Details
context De context waarin uw Toast wordt weergegeven. this wordt vaak gebruikt in een activiteit en getActivity() wordt vaak gebruikt in een fragment
tekst Een CharSequence die aangeeft welke tekst in de Toast wordt getoond. Elk object dat CharSequence implementeert, kan worden gebruikt, inclusief een String
RESID Een resource-ID die kan worden gebruikt om een resource String te leveren die in de Toast wordt weergegeven
looptijd Geheel getalvlag die aangeeft hoe lang de toast wordt weergegeven. Opties zijn Toast.LENGTH_SHORT en Toast.LENGTH_LONG
zwaartekracht Geheel getal dat de positie of "zwaartekracht" van de toast aangeeft. Zie opties hier
xOffset Specificeert de horizontale offset voor de Toast-positie
yOffset Specificeert de verticale offset voor de Toast-positie

Opmerkingen

Een toast geeft eenvoudige feedback over een bewerking in een kleine pop-up. Het vult alleen de hoeveelheid ruimte die nodig is voor het bericht en de huidige activiteit blijft zichtbaar en interactief.

Een recenter alternatief voor Toast is SnackBar. SnackBar biedt een bijgewerkte visuele stijl en stelt de gebruiker in staat om het bericht te negeren of verdere actie te ondernemen. Raadpleeg de SnackBar- documentatie voor meer informatie.

Officiële documentatie:

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

Stel de positie van een toast in

Een standaard toastmelding verschijnt onderaan het scherm in het midden horizontaal. U kunt deze positie wijzigen met de setGravity(int, int, int) . Dit accepteert drie parameters: een zwaartekrachtconstante, een x-positie-offset en een y-positie-offset.

Als u bijvoorbeeld besluit dat de toast in de linkerbovenhoek moet verschijnen, kunt u de zwaartekracht als volgt instellen:

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

Een toastbericht weergeven

In Android is een Toast een eenvoudig UI-element dat kan worden gebruikt om contextuele feedback aan een gebruiker te geven.

Om een eenvoudig Toast-bericht weer te geven, kunnen we het volgende doen.

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

Of, om een Toast inline weer te geven, zonder het Toast-object vast te houden, kunt u:

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

BELANGRIJK: Zorg ervoor dat de methode show() wordt aangeroepen vanuit de UI-thread. Als u een Toast uit een andere thread probeert te tonen, kunt u bijvoorbeeld de methode runOnUiThread van een Activity .

Als u dit niet doet, wat betekent dat u probeert de gebruikersinterface te wijzigen door een Toast te maken, krijgt u een RuntimeException die er als volgt uitziet:

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

De eenvoudigste manier om met deze uitzondering om te gaan, is door runOnUiThread te gebruiken: syntaxis wordt hieronder weergegeven.

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

Een aangepaste Toast maken

Als u de standaard Toast-weergave niet wilt gebruiken, kunt u deze met de methode setView(View) op een Toast object setView(View) .

Maak eerst de XML-lay-out die u in uw Toast wilt gebruiken.

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

setView vervolgens bij het maken van uw Toast uw aangepaste weergave op uit XML en roep 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 veilige manier om Toast weer te geven (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();
                }
            }
        });
    }

Vergeet niet MainApplication in manifest toe te voegen.

Roep het nu vanuit elke thread op om een toastbericht weer te geven.

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

Toon Toast-bericht boven het zachte toetsenbord

Standaard geeft Android Toast-berichten onder aan het scherm weer, zelfs als het toetsenbord wordt weergegeven. Dit toont een Toast-bericht net boven het toetsenbord.

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 veilige manier om een Toast-bericht weer te geven (voor AsyncTask)

Als je de toepassing niet wilt verlengen en je toast-berichten veilig wilt houden, zorg er dan voor dat je ze laat zien in het gedeelte na uitvoering van je 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow