Szukaj…


Wprowadzenie

Toast zapewnia proste informacje zwrotne na temat operacji w małym wyskakującym okienku i automatycznie znika po upływie limitu czasu. Wypełnia tylko tyle miejsca, ile potrzeba na wiadomość, a bieżąca aktywność pozostaje widoczna i interaktywna.

Składnia

  • Toast makeText (kontekst kontekstowy, tekst CharSequence, czas trwania int)
  • Toast makeText (Kontekst kontekstu, int resId, int czas trwania)
  • void setGravity (int gravity, int xOffset, int yOffset)
  • void show ()

Parametry

Parametr Detale
kontekst Kontekst, aby wyświetlić swój toast. this jest powszechnie stosowany w działaniu i getActivity() jest powszechnie stosowany we fragmencie
tekst CharSequence, który określa, jaki tekst będzie wyświetlany w Toast. Można użyć dowolnego obiektu, który implementuje CharSequence, w tym String
Resid Identyfikator zasobu, którego można użyć do zapewnienia ciągu zasobu do wyświetlenia w Toast
Trwanie Flaga liczb całkowitych wskazująca, jak długo będzie wyświetlany Toast. Dostępne opcje to Toast.LENGTH_SHORT i Toast.LENGTH_LONG
powaga Liczba całkowita określająca pozycję lub „grawitację” Toasta. Zobacz opcje tutaj
xOffset Określa odsunięcie w poziomie dla pozycji Toast
yOffset Określa przesunięcie pionowe dla pozycji Toast

Uwagi

Toast zapewnia proste informacje zwrotne na temat operacji w małym wyskakującym okienku. Wypełnia tylko tyle miejsca, ile potrzeba na wiadomość, a bieżąca aktywność pozostaje widoczna i interaktywna.

Nowszą alternatywą dla Toast jest SnackBar. SnackBar oferuje zaktualizowany styl wizualny i pozwala użytkownikowi odrzucić wiadomość lub podjąć dalsze działania. Szczegółowe informacje można znaleźć w dokumentacji SnackBar .

Oficjalna dokumentacja:

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

Ustaw pozycję Toast

Standardowe powiadomienie toast pojawia się na dole ekranu, wyrównane w poziomym środku. Możesz zmienić tę pozycję za pomocą setGravity(int, int, int) . Akceptuje to trzy parametry: stałą grawitacji, przesunięcie położenia x i przesunięcie położenia y.

Na przykład, jeśli zdecydujesz, że toast powinien pojawić się w lewym górnym rogu, możesz ustawić grawitację w następujący sposób:

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

Pokazuje wiadomość Toast

W Androidzie, Toast jest prostym elementem interfejsu użytkownika, którego można używać do przekazywania kontekstowej informacji zwrotnej użytkownikowi.

Aby wyświetlić prosty komunikat Toast, możemy wykonać następujące czynności.

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

Lub, aby pokazać Toast w linii, bez trzymania obiektu Toast, możesz:

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

WAŻNE: Upewnij się, że metoda show() jest wywoływana z wątku interfejsu użytkownika. Jeśli próbujesz pokazać Toast z innego wątku, możesz np. runOnUiThread metody runOnUiThread Activity .

Jeśli tego nie zrobisz, co oznacza próbę zmodyfikowania interfejsu użytkownika przez utworzenie Toast, RuntimeException który będzie wyglądał następująco:

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

Najprostszym sposobem obsługi tego wyjątku jest użycie runOnUiThread: składnia jest pokazana poniżej.

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

Tworzenie niestandardowego Toast

Jeśli nie chcesz używać domyślnego widoku Toast, możesz podać własny, używając metody setView(View) na obiekcie Toast .

Najpierw utwórz układ XML, którego chcesz używać w 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>

Następnie, podczas tworzenia Toast, napompuj swój niestandardowy widok z XML i wywołaj 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();

Bezpieczny sposób wyświetlania wątku Toast (szeroki zakres aplikacji)

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

Pamiętaj, aby dodać manifest MainApplication .

Teraz wywołaj go z dowolnego wątku, aby wyświetlić wiadomość toast.

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

Pokaż wiadomość Toast powyżej miękkiej klawiatury

Domyślnie system Android wyświetla wiadomości Toast u dołu ekranu, nawet jeśli klawiatura jest wyświetlana. Spowoduje to wyświetlenie komunikatu Toast tuż nad klawiaturą.

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

Wątek bezpieczny sposób wyświetlania komunikatu Toast (dla AsyncTask)

Jeśli nie chcesz rozszerzać aplikacji i zabezpieczać wątków wiadomości toast, upewnij się, że wyświetlasz je w sekcji post-execute swoich zadań 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow