|
||
|
|
|
|||||||
| 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
|
||||
|
||||
|
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();
}
|
|
|
|
#2
|
||||
|
||||
|
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); 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); Y para terminar devuelves la View: toast.setView(layout); Prueba haber si te funciona.
__________________
Visita mi blog: EL BAUL DE ANDROID
|
|
#3
|
||||
|
||||
|
Efectivamente, funciona. Estuve pensando en esa solución y al final no la probé. Gracias
|
![]() |
Estás aquí
|
||||||
|
||||||