Cómo colocar un icono en el título de un diálogo personalizado

Me gustaría colocar un dibujable en una barra de título de diálogos. He intentado lo siguiente:

final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.some_icon); dialog.setTitle(R.string.my_dialog_title); dialog.setContentView(R.layout.my_dialog_layout); ... 

El icono no aparece, pero el título se mueve un poco hacia la derecha. Parece que el diálogo reserva espacio para el dibujable pero no lo dibuja. He probado varios iconos diferentes (también de los recursos de Android), pero no de ellos funcionó.

Llame a setFeatureDrawableResource() después de show() .

No tengo idea de por qué esto funciona. 🙂

Aquí está la solución

 final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); dialog.setTitle(R.string.my_dialog_title); dialog.setContentView(R.layout.my_dialog_layout); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.some_icon); dialog.show(); 

Si desea que su cuadro de diálogo aparezca como una actividad que agregue el tema al diálogo como sigue

 final Dialog dialog = new Dialog(this,AlertDialog.THEME_HOLO_LIGHT); 

También puede ampliar la clase de Dialog la siguiente manera:

 public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); setTitle("Some Title"); requestWindowFeature(Window.FEATURE_LEFT_ICON); setContentView(R.layout.my_layout); } @Override protected void onStart() { setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.my_icon); super.onStart(); } 

Es decir, prepara la función de ventana en el constructor y luego establece el recurso concreto en onStart.

Por lo tanto, en su código principal simplemente puede utilizar:

  CustomDialog cd = new CustomDialog(getActivity()); rd.show(); 

Aquí está la solución. ¡Sigue la receta y tendrás tu icono! Nota: el orden es muy importante …

  final Dialog yourDialog = new Dialog(YourClass.this); yourDialog.requestWindowFeature(Window.FEATURE_LEFT_ICON); //must come BEFORE setContentView yourDialog.setContentView(R.layout.yourDialog_layout); yourDialog.setTitle("Your Title"); yourDialog.setCancelable(true); yourDialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.your_icon); //must come AFTER setContentView 

Lo hice funcionar de otra manera, gracias al puesto de Smaïl Hammour.

Coloque este método estático en su clase de herramienta preferida:

 public static void msgBox( String msg, String title, int type, final Context c){ int theIcon = drawable.ic_dialog_alert; switch(type){ case YourToolClass.CONFIRMATION: theIcon = drawable.ic_menu_help; break; case YourToolClass.INFO: theIcon = drawable.ic_dialog_info; break; case YourToolClass.ALERT: default: } AlertDialog.Builder builder = new AlertDialog.Builder(c); /* Here enters the .setIcon: */ builder.setMessage(msg) .setTitle (title) .setIcon(theIcon); builder.setPositiveButton( "OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { /* */ } }); AlertDialog dialog = builder.create(); dialog.show(); } 

Invocar:

 YourToolClass.msgBox("the main message goes here", "Test", getBaseContext()); 
 setIcon(R.drawable.image_name) 

Llamando a setFeatureDrawableResource como esta

  dialog.show(); dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.logo_1x); 

Es decir, después de llamar a dialog.show () funcionó perfectamente en mi caso .. gracias .. 🙂

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.