Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 22/02/13, 18:35:53
Array

[xs_avatar]
ugarte ugarte no está en línea
Miembro del foro
 
Fecha de registro: abr 2012
Mensajes: 66
Tu operador: Movistar

Toast personalizado ayuda

Buenas! llevo ya varias horas buscando el fallo y no soy capaz de encontrarlo.
Quiero que en mi aplicación cuando pase determinada cosa aparezca un Toast personalizado con un XML para informarme de que se ha desbloqueado un logro.
Haciendo el toast por defecto no hay problema:

XML del Toast toast_layout.xml:
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/toast_layout_root"
    android:background="#555555"
  	android:padding="5dip" >
    
    <ImageView 
        android:id="@+id/imgLogro"
        android:layout_width="55dp"
        android:layout_height="55dp"
        android:src="@drawable/oro"/>
    
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:orientation="vertical"
    android:layout_marginLeft="10dp"
    android:gravity="center_vertical" >
    
    <TextView 
        android:id="@+id/txtTitulo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Logro desbloqueado"
        android:textSize="20dp"
        android:textColor="#fff"/>
    
    <TextView 
        android:id="@+id/txtSubtitulo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Información sobre el logro"
        android:textSize="14dp"
        android:textColor="#fff" />
    
	</LinearLayout>
</LinearLayout>

Instrucción:

Código:
btn.setOnClickListener(new OnClickListener() {
			
	@Override
	public void onClick(View v) {
		LayoutInflater inflater = getLayoutInflater();
		View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));
				
		Toast toast = new Toast(getApplicationContext());
		toast.setGravity(Gravity.CENTER, 0, 0);
		toast.setDuration(Toast.LENGTH_LONG);
		toast.setView(layout);
		toast.show();
	}
});

El problema es cuando intento modificar los atributos de los elementos que hay en el XML desde código:
Código:
public void onClick(View v) {
	notificacion(1, "El comienzo", "Consigue el primer acierto");
}
...........

Código:
public void notificacion(int tipo, String titulo, String subTitulo) {

		
		ImageView imgLogro = (ImageView)findViewById(R.id.imgLogro);
		TextView txtTitulo = (TextView)findViewById(R.id.txtTitulo);
		TextView txtSubTitulo = (TextView)findViewById(R.id.txtSubtitulo);
		
		switch (tipo) {
			case 1:		imgLogro.setImageResource(R.drawable.bronce);	break;
			case 2:		imgLogro.setImageResource(R.drawable.plata); 	break;
			case 3:		imgLogro.setImageResource(R.drawable.oro);	break;
		}
		txtTitulo.setText(titulo);
		txtSubTitulo.setText(subTitulo);
		
		LayoutInflater inflater = getLayoutInflater();
		View layout = inflater.inflate(R.layout.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

		
		Toast toast = new Toast(getApplicationContext());
		toast.setGravity(Gravity.CENTER, 0, 0);
		toast.setDuration(Toast.LENGTH_LONG);
		toast.setView(layout);
		toast.show();
	}
Responder Con Cita


  #2  
Viejo 22/02/13, 20:31:59
Array

[xs_avatar]
rinxe rinxe no está en línea
Miembro del foro
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Tu operador: Yoigo
Me suena a mi que para inflar una vista primero tienes que declarar el Layoutinflater
Código:
LayoutInflater inflater = activity.getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout, null);
Luego crear los objetos de esa vista, fijate que se pone "layout." delante de findViewById
Código:
ImageView imgLogro = (ImageView) layout.findViewById(R.id.imgLogro);
TextView txtTitulo = (TextView) layout.findViewById(R.id.txtTitulo);
TextView txtSubTitulo = (TextView) layout.findViewById(R.id.txtSubtitulo);
Una vez hecho eso ya puede usar los metodos setImageResource o setText.

Y para terminar devuelves la View: toast.setView(layout);

Prueba haber si te funciona.
__________________
Visita mi blog: EL BAUL DE ANDROID
Responder Con Cita
  #3  
Viejo 23/02/13, 15:00:37
Array

[xs_avatar]
ugarte ugarte no está en línea
Miembro del foro
 
Fecha de registro: abr 2012
Mensajes: 66
Tu operador: Movistar

Efectivamente, funciona. Estuve pensando en esa solución y al final no la probé. Gracias
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 09:51:01 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /