Поиск…


Вступление

Тост обеспечивает простую обратную связь о операции в небольшом всплывающем окне и автоматически исчезает после таймаута. Он заполняет объем пространства, необходимый для сообщения, и текущая активность остается видимой и интерактивной.

Синтаксис

  • Toast makeText (контекст контекста, текст CharSequence, int duration)
  • Toast makeText (контекст контекста, int resId, int duration)
  • void setGravity (int gravity, int xOffset, int yOffset)
  • void show ()

параметры

параметр подробности
контекст Контекст для отображения вашего Toast in. this обычно используется в Activity, а getActivity() обычно используется в фрагменте
текст CharSequence, который указывает, какой текст будет показан в Toast. Любой объект, реализующий CharSequence, может использоваться, включая String
RESID Идентификатор ресурса, который может использоваться для предоставления ресурса Строка для отображения в Toast
продолжительность Целочисленный флаг, показывающий, как долго будет отображаться тост. Параметры: Toast.LENGTH_SHORT и Toast.LENGTH_LONG
сила тяжести Целое число, определяющее позицию или «гравитацию» Тоста. См. Параметры здесь
xOffset Задает горизонтальное смещение для позиции Toast
YOffset Определяет вертикальное смещение для позиции Toast

замечания

Тост обеспечивает простую обратную связь об операции в небольшом всплывающем окне. Он заполняет объем пространства, необходимый для сообщения, и текущая активность остается видимой и интерактивной.

Более поздняя альтернатива Toast - SnackBar. SnackBar предлагает обновленный визуальный стиль и позволяет пользователю отклонить сообщение или предпринять дальнейшие действия. Подробности см. В документации SnackBar .

Официальная документация:

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

Установить положение тоста

Стандартное уведомление тоста появляется в нижней части экрана, выровненного в горизонтальном центре. Вы можете изменить эту позицию с помощью setGravity(int, int, int) . Он принимает три параметра: константу силы тяжести, смещение по оси x и смещение позиции y.

Например, если вы решите, что тост должен появиться в верхнем левом углу, вы можете установить гравитацию следующим образом:

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

Отображение сообщения о Toast

В Android, Toast - это простой элемент пользовательского интерфейса, который может использоваться для предоставления контекстной обратной связи пользователю.

Чтобы отобразить простое сообщение Toast, мы можем сделать следующее.

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

Или, чтобы показать Toast inline, не удерживая объект Toast, вы можете:

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

ВАЖНО: Убедитесь, что метод show() вызывается из потока пользовательского интерфейса. Если вы пытаетесь показать Toast из другого потока, вы можете, например, использовать метод runOnUiThread для Activity .

В противном случае, имея в виду попытку изменить пользовательский интерфейс, создав Toast, вы получите RuntimeException которое будет выглядеть следующим образом:

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

Самый простой способ обработки этого исключения - просто использовать runOnUiThread: синтаксис показан ниже.

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

Создание пользовательского тоста

Если вы не хотите использовать представление Toast по умолчанию, вы можете предоставить свой собственный, используя метод setView(View) на объекте Toast .

Во-первых, создайте XML-макет, который вы хотели бы использовать в своем 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>

Затем, создавая свой тост, надуйте свой собственный вид из XML и вызовите 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();

Реальный безопасный способ отображения 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();
                }
            }
        });
    }

Не забудьте добавить MainApplication в manifest .

Теперь вызовите его из любого потока, чтобы отобразить тост-сообщение.

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

Показать сообщение с тостами над мягкой клавиатурой

По умолчанию Android отображает сообщения Toast в нижней части экрана, даже если клавиатура отображается. Это покажет сообщение Toast чуть выше клавиатуры.

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 безопасный способ отображения сообщения Toast (для AsyncTask)

Если вы не хотите распространять приложение и поддерживать потоки сообщений в потоковом режиме, убедитесь, что вы показываете их в разделе после выполнения своих задач 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow