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