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!