Añadiendo imagen a Toast?
¿Es posible agregar una imagen a una ventana emergente de tostadas mediante programación?
- Cómo evitar un brindis si ya se muestra un brindis
- ¿Se puede usar OnClickListener con un brindis?
- Android - Snackbar vs Toast - uso y diferencia
- ¿Cómo alertar al usuario utilizando Toast que la solicitud OkHttp devolvió algo distinto de 200?
- Android Toast Mensajes no funcionan
- ¿Cómo mostrar Toast de un Servicio después de que la actividad principal termine?
- ¿Puede un Android Toast ser más largo que Toast.LENGTH_LONG?
- ¿Hay código para Snackbars en Android L o se espera que los implementemos nosotros mismos?
- ¿Por qué mi tostada no funcionó?
- Tostadas simples de Android no se alinean correctamente
- IntentService no mostrará Toast
- Los bordes del diálogo Toast y Progress se cortan
- Tostada personalizada en la parte superior de la pantalla
Sí , puede agregar vista de imagen o cualquier vista a la notificación de brindis usando el método setView (), utilizando este método puede personalizar el brindis según su requerimiento.
Aquí he creado un archivo de diseño personalizado para ser inflado en la notificación Toast y, a continuación, he utilizado este diseño en la notificación Toast utilizando el método setView ().
Cust_toast_layout.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/relativeLayout1" android:background="@android:color/white"> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="PM is here" android:gravity="center" android:textColor="@android:color/black"> </TextView> <ImageView android:layout_height="wrap_content" android:layout_width="fill_parent" android:src="@drawable/new_logo" android:layout_below="@+id/textView1" android:layout_margin="5dip" android:id="@+id/imageView1"> </ImageView> <TextView android:id="@+id/textView2" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="This is the demo of Custom Toast Notification" android:gravity="center" android:layout_below="@+id/imageView1" android:textColor="@android:color/black"> </TextView> </RelativeLayout>
CustomToastDemoActivity.java
LayoutInflater inflater = getLayoutInflater(); View view = inflater.inflate(R.layout.cust_toast_layout, (ViewGroup) findViewById(R.id.relativeLayout1)); Toast toast = new Toast(this); toast.setView(view); toast.show();
Simplemente, utilice lo siguiente:
Toast toast = new Toast(myContext); ImageView view = new ImageView(myContext); view.setImageResource(R.drawable.image_icon); toast.setView(view); toast.show();
Puede crear cualquier vista de forma programática (ya que estoy asumiendo que usted está preguntando cómo hacer esto sin usar LayoutInflater) y llame a setView en el Toast que hizo.
//Create a view here LinearLayout v = new LinearLayout(this); //populate layout with your image and text or whatever you want to put in here Toast toast = new Toast(getApplicationContext()); toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); toast.setDuration(Toast.LENGTH_LONG); toast.setView(v); toast.show();
La solución de Knickedi es buena, pero si sólo necesita un icono junto al texto, puede utilizar el hecho de que el Toast tiene un TextView predefinido con el mismo ID y establecer el icono en TextView:
Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT); TextView tv = (TextView) toast.getView().findViewById(android.R.id.message); if (null!=tv) { tv.setCompoundDrawablesWithIntrinsicBounds(icon, 0, 0, 0); tv.setCompoundDrawablePadding(context.getResources().getDimensionPixelSize(R.dimen.padding_toast));
Siempre existe la posibilidad de crear un diseño personalizado. Hubo un hecho que no me gustaba de eso: rompe la interfaz de usuario por defecto del sistema. Esto podría diferir en diferentes plataformas e implementaciones. No hay una manera simple de usar el recurso predeterminado del sistema, así que decidí cortar el brindis y forzar una imagen en él.
Sugerencia : Puede obtener el recurso predeterminado de la siguiente manera:
Toast.makeToast(context, "", 0).getView().getBackground()
Aquí hay un ayudante que mostrará una imagen delante del mensaje de brindis: Helper.makeImageToast(context, R.drawable.my_image, "Toast with image", Toast.LENGTH_SHORT).show()
Utilizo eso para indicar el éxito, la información o el error. Hace una información de brindis más agradable y más expresiva …
(Vale la pena mencionar que el hack basa en el hecho de que el tostado interno está utilizando un LinearLayout
por lo que no es sistema e implementación independiente.
public static Toast makeImageToast(Context context, int imageResId, CharSequence text, int length) { Toast toast = Toast.makeText(context, text, length); View rootView = toast.getView(); LinearLayout linearLayout = null; View messageTextView = null; // check (expected) toast layout if (rootView instanceof LinearLayout) { linearLayout = (LinearLayout) rootView; if (linearLayout.getChildCount() == 1) { View child = linearLayout.getChildAt(0); if (child instanceof TextView) { messageTextView = (TextView) child; } } } // cancel modification because toast layout is not what we expected if (linearLayout == null || messageTextView == null) { return toast; } ViewGroup.LayoutParams textParams = messageTextView.getLayoutParams(); ((LinearLayout.LayoutParams) textParams).gravity = Gravity.CENTER_VERTICAL; // convert dip dimension float density = context.getResources().getDisplayMetrics().density; int imageSize = (int) (density * 25 + 0.5f); int imageMargin = (int) (density * 15 + 0.5f); // setup image view layout parameters LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(imageSize, imageSize); imageParams.setMargins(0, 0, imageMargin, 0); imageParams.gravity = Gravity.CENTER_VERTICAL; // setup image view ImageView imageView = new ImageView(context); imageView.setImageResource(imageResId); imageView.setLayoutParams(imageParams); // modify root layout linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.addView(imageView, 0); return toast; }
Creo que esto es mejor que mostramos el texto de Toast en la imagen que pasamos a la función makeImageToast … así que las sombras Knickedi códigos y:
public class utility { public static Toast makeImageToast(Context context, int imageResId, CharSequence text, int length) { Toast toast = Toast.makeText(context, text, length); View rootView = toast.getView(); LinearLayout linearLayout = null; View messageTextView = null; // check (expected) toast layout if (rootView instanceof LinearLayout) { linearLayout = (LinearLayout) rootView; if (linearLayout.getChildCount() == 1) { View child = linearLayout.getChildAt(0); if (child instanceof TextView) { messageTextView = (TextView) child; ((TextView) child).setGravity(Gravity.CENTER); } } } // cancel modification because toast layout is not what we expected if (linearLayout == null || messageTextView == null) { return toast; } ViewGroup.LayoutParams textParams = messageTextView.getLayoutParams(); ((LinearLayout.LayoutParams) textParams).gravity = Gravity.CENTER; // convert dip dimension float density = context.getResources().getDisplayMetrics().density; int imageSize = (int) (density * 25 + 0.5f); int imageMargin = (int) (density * 15 + 0.5f); // setup image view layout parameters LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(imageSize, imageSize); imageParams.setMargins(0, 0, imageMargin, 0); imageParams.gravity = Gravity.CENTER; // setup image view ImageView imageView = new ImageView(context); imageView.setImageResource(imageResId); imageView.setLayoutParams(imageParams); // modify root layout linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.setBackgroundResource(imageResId); linearLayout.setGravity(Gravity.CENTER); linearLayout.setHorizontalGravity(Gravity.CENTER); linearLayout.setHorizontalGravity(Gravity.CENTER); //addView(imageView, 0); return toast; }
}
Y esto es uso de ella:
utility.makeImageToast(getApplicationContext(), R.drawable.your_image,"your_text",Toast.LENGTH_LONG).show();
- NavigationView y diseño personalizado
- ¿Cómo puedo generar un apk que se pueda ejecutar sin servidor con react-native?