2010-11-26 14 views
18

Me gustaría colocar un dibujable en la barra de título de un cuadro de diálogo. Intenté lo siguiente:Cómo colocar un icono en el título de un cuadro de diálogo personalizado

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 a la derecha. Parece que el diálogo reserva espacio para el dibujable pero no lo dibuja. Probé varios iconos diferentes (también de los recursos de Android) pero ninguno funcionó.

Respuesta

15

Llamar setFeatureDrawableResource()después deshow().

No tengo idea de por qué esto funciona. :)

+0

Gracias! Probablemente un error en el marco? – Tom

+6

Usa esto y lo pones antes del espectáculo. requestWindowFeature -> setContentView -> setFeatureDrawableResource –

+1

Esto también se puede utilizar en una actividad –

15

Aquí es 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 mirada de diálogo como una actividad que añadir el tema de diálogo de la siguiente manera

final Dialog dialog = new Dialog(this,AlertDialog.THEME_HOLO_LIGHT); 
1
setIcon(R.drawable.image_name) 
2

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 
2

lo tengo para trabajar de una manera diferente, gracias a la entrada Smaïl Hammour.

Coloque este método estático en la 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()); 
3

También puede ampliar la clase Dialog así:

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, que prepare su función de ventana en el constructor y luego configure el recurso concreto en onStart.

Por lo tanto, en que el código principal puede simplemente usar:

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

+1 para una solución que funciona cuando se anula 'onCreateView (...)' en lugar de 'onCreateDialog (...)'. –

0

llamando setFeatureDrawableResource llike este

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

es decir, después de llamar dialog.show() funcionado perfectamente en mi caso .. gracias. . :)

Cuestiones relacionadas