Buscar..


Introducción

Un Toast proporciona comentarios simples sobre una operación en una pequeña ventana emergente y desaparece automáticamente después de un tiempo de espera. Solo llena la cantidad de espacio requerido para el mensaje y la actividad actual permanece visible e interactiva.

Sintaxis

  • Toast makeText (contexto de contexto, texto CharSequence, duración int)
  • Toast makeText (contexto de contexto, int resId, int duration)
  • void setGravity (int gravity, int xOffset, int yOffset)
  • espectáculo nulo ()

Parámetros

Parámetro Detalles
contexto El contexto para mostrar su Toast. this se usa comúnmente en una Actividad y getActivity() se usa comúnmente en un Fragmento
texto Una secuencia de caracteres que especifica qué texto se mostrará en el Toast. Se puede usar cualquier objeto que implemente CharSequence, incluido un String
resuelto Un ID de recurso que se puede usar para proporcionar una Cadena de recursos para mostrar en el Toast
duración Bandera de enteros que representa la duración del Toast. Las opciones son Toast.LENGTH_SHORT y Toast.LENGTH_LONG
gravedad Entero que especifica la posición o "gravedad" de la tostada. Ver opciones aquí
xOffset Especifica el desplazamiento horizontal para la posición Toast.
yOffset Especifica el desplazamiento vertical para la posición Toast.

Observaciones

Un brindis proporciona información simple sobre una operación en una pequeña ventana emergente. Solo llena la cantidad de espacio requerido para el mensaje y la actividad actual permanece visible e interactiva.

Una alternativa más reciente a Toast es SnackBar. SnackBar ofrece un estilo visual actualizado y permite al usuario descartar el mensaje o tomar medidas adicionales. Consulte la documentación de SnackBar para más detalles.

Documentación oficial:

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

Establecer posición de una tostada

Aparece una notificación estándar de tostadas en la parte inferior de la pantalla alineada en el centro horizontal. Puede cambiar esta posición con setGravity(int, int, int) . Esto acepta tres parámetros: una constante de gravedad, un desplazamiento de posición x y un desplazamiento de posición y.

Por ejemplo, si decides que la tostada debería aparecer en la esquina superior izquierda, puedes establecer la gravedad de esta manera:

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

Mostrando un mensaje de brindis

En Android, un Toast es un elemento simple de la interfaz de usuario que se puede usar para dar retroalimentación contextual a un usuario.

Para mostrar un mensaje simple de Toast, podemos hacer lo siguiente.

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

O, para mostrar un Toast en línea, sin aferrarte al objeto Toast puedes:

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

IMPORTANTE: asegúrese de que se llame al método show() desde el subproceso de la interfaz de usuario. Si está intentando mostrar un Toast desde un hilo diferente, por ejemplo, puede usar el método runOnUiThread de una Activity .

Si no lo hace, es decir, intentar modificar la interfaz de usuario mediante la creación de un Toast, se emitirá una RuntimeException que se verá así:

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

La forma más sencilla de manejar esta excepción es simplemente usando runOnUiThread: la sintaxis se muestra a continuación.

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

Creando un brindis personalizado

Si no desea utilizar la vista predeterminada de Toast, puede proporcionar la suya propia utilizando el setView(View) en un objeto Toast .

Primero, cree el diseño XML que le gustaría usar en su 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>

Luego, cuando cree su Toast, infle su Vista personalizada desde XML, y llame a 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();

Forma segura de subprocesos de mostrar Toast (aplicación amplia)

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

Recuerde agregar MainApplication en manifest .

Ahora llámalo desde cualquier hilo para mostrar un mensaje de brindis.

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

Mostrar mensaje de tostada sobre el teclado suave

De forma predeterminada, Android mostrará los mensajes de Toast en la parte inferior de la pantalla, incluso si se muestra el teclado. Esto mostrará un mensaje de Toast justo encima del teclado.

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

Hilo seguro de mostrar un mensaje de Toast (para AsyncTask)

Si no desea extender la Aplicación y mantener seguros los mensajes de su tostada, asegúrese de mostrarlos en la sección de ejecución posterior de sus Tareas Asíncronas.

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow