2010-11-26 9 views
18

Je souhaite placer un élément dessinable dans la barre de titre d'une boîte de dialogue. J'ai essayé ce qui suit:Comment placer une icône dans le titre d'une boîte de dialogue personnalisée

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); 
... 

L'icône n'apparaît pas mais le titre se déplace un peu vers la droite. Il semble que le dialogue réserve de la place au dessin mais ne le dessine pas. J'ai essayé plusieurs icônes différentes (également à partir des ressources android), mais pas d'entre eux ont travaillé.

Répondre

15

Appelez setFeatureDrawableResource()aprèsshow().

Aucune idée de pourquoi cela fonctionne. :)

+0

Merci! Probablement un bug dans le cadre? – Tom

+6

Utilisez ceci et mettez-le avant le spectacle. requestWindowFeature -> setContentView -> setFeatureDrawableResource –

+1

Cela peut également être utilisé dans une activité –

15

est ici solution

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 vous voulez que votre regard dialogue comme une activité que d'ajouter le thème de dialogue comme suit

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

Voici la solution. Suivez la recette et vous aurez votre icône! Note: la commande est très 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

Je l'ai fait fonctionner de manière différente, grâce au poteau Smaïl Hammour.

place cette méthode statique dans votre préféré classe d'outil:

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(); 

} 

invoquez:

YourToolClass.msgBox("the main message goes here", "Test", getBaseContext()); 
3

Vous pouvez également étendre la classe Dialog comme ceci:

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(); 
    } 

c.-à-vous préparer votre fonctionnalité de fenêtre dans le constructeur, puis définir la ressource concrète dans onStart.

Ainsi, dans votre code principal, vous pouvez simplement utiliser:

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

+1 pour une solution qui fonctionne lorsque vous remplacez 'onCreateView (...) 'au lieu de' onCreateDialog (...) '. –

0

appelant setFeatureDrawableResource llike cette

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

-à-dire après avoir appelé dialog.show() a parfaitement fonctionné dans mon cas .. merci. . :)

Questions connexes