Lo primero declaramos un entero en la actividad que lanze al dialog:
private static final int DIALOG_MINIJUEGOS_RESULT = 0;
creamos un .xml que será el layout del dialog, puede ser lo que queráis, en este caso es una imagen y un textview, pero podríais usar cualquier tipo de layout.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/llDialog" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:padding="10dp" > <ImageView android:id="@+id/ivDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:paddingBottom="5dp" /> <TextView android:id="@+id/tvDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingBottom="5dp" android:textColor="#FFF" /> <Button android:id="@+id/bDialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Cerrar" /> </LinearLayout>
Ahora hay 2 opciones, en la actividad que querais lanzar el dialog, sobreescribir el metodo:
onCreateDialog(int id, Bundle bundle)
o el método:
onCreateDialog(int id)
Al primero le puedes pasar un bundle con información extra para el dialog, en este caso se usa el primero, al que le pasamos la informacion a mostrar en el dialog haciendo uso del mencionado bundle.
@Override protected Dialog onCreateDialog(int id, Bundle bundle) { Dialog dialog = null; switch (id) { case DIALOG_MINIJUEGOS_RESULT: // obtiene datos String textoDialog = bundle.getString("textoDialog"); int idIvDialog = bundle.getInt("idIvDialog"); // crea dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialogimg); dialog.setTitle("Resultado Minijuego"); // pone elementos TextView tvDialog = (TextView) dialog.findViewById(R.id.tvDialog); tvDialog.setText(textoDialog); ImageView ivDialog = (ImageView) dialog.findViewById(R.id.ivDialog); ivDialog.setImageResource(idIvDialog); // ivDialog.setImageResource(R.drawable.bonoff); Button bDialog = (Button) dialog.findViewById(R.id.bDialog); bDialog.setOnClickListener(this); break; } return dialog; }
Por ultimo lanzais el dialog donde lo necesiteis usando:
//creamos el bundle Bundle dialogBundle = new Bundle(); //le añadimos la informacion que queramos dialogBundle.putString("textoDialog", textoDialog); dialogBundle.putInt("idIvDialog", idIvDialog); //lanzamos el dialog showDialog(DIALOG_MINIJUEGOS_RESULT, dialogBundle);
si usarais la opción sin bundle sería igual pero kitando el segundo parámetro, y obviamente no es necesario crear el bundle ni nada de eso.
Por último para cerrar el dialog se usa el botón bDialog que hemos añadido al dialog, y en el onclick() de nuestra actividad metemos un case nuevo con ese botón de la siguiente forma:
case R.id.bDialog: dismissDialog(DIALOG_MINIJUEGOS_RESULT); break;
Usamos el metodo dismissDialog() pasandole el mismo en entero que le pasamos cuando lanzamos el dialog.
Y esto es todo para crear un dialog custom, se pueden hacer más cosas pero lo básico es esto, si solo necesitáis mostrar texto y algún botón, no teneis que meteros en este jaleo, simplemente consultad este articulo de android.
Un saludo!