Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 22/02/13, 18:35:53
Avatar de ugarte
ugarte ugarte no está en línea
Miembro del foro
Mensajes: 66
 
Fecha de registro: abr 2012
Mensajes: 66
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de rinxe
rinxe rinxe no está en línea
Miembro del foro
Mensajes: 260
 
Fecha de registro: mar 2009
Localización: Teruel
Mensajes: 260
Modelo de smartphone: Xiaomi Mi5S
Versión de ROM: LineageOS 14.1
Versión de Radio: Los 40
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
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.
Responder Con Cita
  #3  
Viejo 23/02/13, 15:00:37
Avatar de ugarte
ugarte ugarte no está en línea
Miembro del foro
Mensajes: 66
 
Fecha de registro: abr 2012
Mensajes: 66
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Efectivamente, funciona. Estuve pensando en esa solución y al final no la probé. Gracias
Responder Con Cita
Respuesta

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

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 12:38:57 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007