2011-01-31 3 views
4

Comment puis-je ajouter un titre à cette boîte de dialogue personnalisée?Comment ajouter un titre à la boîte de dialogue personnalisée?

enter image description here

J'ai essayé comme ça

public void customDialog() 
{ 
    Dialog dialog=new Dialog(this); 
    dialog.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    dialog.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.string.app_name); 
    dialog.setContentView(R.layout.dialog_submit); 
    TextView edit_model=(TextView) dialog.findViewById(R.id.edit_model); 
    edit_model.setText(android.os.Build.DEVICE); 
    dialog.show(); 
}//end of custom dialog function 

J'ai essayé de mettre le titre comme ça aussi .. dialog.setTitle("Enter Details"); mais cela aussi ne pas donné aucun résultat. Alors, comment puis-je définir le titre de cette boîte de dialogue personnalisée?

Ceci est mon fichier dialog_submit.xml utilisé pour la boîte de dialogue personnalisée.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/layout_root" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="10dp" 
      > 
    <TextView android:id="@+id/txt_name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#FFF" 
      android:text="Name" 
      android:textStyle="bold" 
      /> 
    <EditText android:id="@+id/edit_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_name" 
      /> 
<TextView android:id="@+id/txt_model" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#FFF" 
      android:layout_below="@+id/edit_name" 
      android:text="Phone Model" 
      /> 
<TextView android:id="@+id/edit_model" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/txt_model" 
      /> 

<Button android:id="@+id/but_cancel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/edit_model" 
      android:text="Cancel"  
      /> 
<Button android:id="@+id/but_submit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/edit_model" 
      android:layout_toRightOf="@+id/but_cancel"  
      android:text="Submit"  
      />      
</RelativeLayout> 

Répondre

3

Avez-vous essayé?

dialog.setTitle(R.string.app_name); 
+0

Je l'ai mentionné ci-dessus déjà que dialog.setTitle ("???") ne donne aucun résultat. – Shijilal

+0

@Shijilal: Regardez à nouveau la réponse de Cristian - il définit le titre avec un int plutôt qu'un CharSequence. Assurez-vous d'essayer cette méthode aussi. Cela peut ne pas fonctionner, mais assurez-vous d'essayer les deux options setTitle(). – McStretch

+0

@McStretch J'ai essayé cela..mais il ne fonctionne pas.dialog.SetTitle fonctionnera si je supprime dialog.requestWindowFeature (Window.FEATURE_CUSTOM_TITLE); Si j'enlève cela alors il y a un grand écart entre le titre et la première vue (ie.name), c'est pourquoi j'ai pensé aller avec FEATURE.CUSTOM_TITLE – Shijilal

3

En utilisant la définition de votre mise en page et ce morceau de code:

public void customDialog() 
{ 
    Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.dialog_submit); 
    TextView edit_model = (TextView) dialog.findViewById(R.id.edit_model); 
    edit_model.setText(android.os.Build.DEVICE); 
    dialog.setTitle("Enter Details"); 
    dialog.show(); 
} 


Je reçois cette boîte de dialogue:

enter image description here


Ainsi, vous pouvez essayer dialog.setTitle ("Entrez les détails") à nouveau.
J'ai utilisé l'émulateur fonctionnant sous Android 2.1.

+1

Si vous n'êtes pas satisfait de la position/disposition du titre, est-ce que être une option pour ajouter le titre en tant que TextView à votre disposition de dialogue? –

+0

oui je l'ai fait aussi. Mais voir l'écart entre "Entrer les détails" et "Nom". Son énorme, et je ne pouvais pas trouver un moyen de supprimer cet écart, c'est pourquoi pensé à l'aide de la fonction de titre personnalisé – Shijilal

0

Ce que vous pourriez essayer, si vous avez encore besoin d'une réponse, est un objet AlertDialog.Builder. Dans cet objet, vous pouvez également appeler la méthode setMessage("Title"), qui définira le titre dans le Dialog que vous créerez éventuellement avec ceci. De plus, vous pouvez également spécifier un positiveButton, neutralButton et un negativeButton (disons "Ajouter", "Ok" et "Annuler" dans cet ordre, bien que vous puissiez spécifier votre propre texte).

Je crois que le problème réside dans le fait que lorsque vous appelez Dialog dialog = new Dialog(this) le onCreateDialog(int id) est appelé. Mais voici la capture: cette méthode est appelée une fois et fournit un Dialog qui est réutilisé chaque fois que vous avez besoin d'un nouveau Dialog. Cependant, le Dialog ne peut plus être modifié (pour autant que je sache). Eh bien peut-être avec la méthode onPrepareDialog(int id, Dialog dialog), mais j'essaie toujours de le faire fonctionner moi-même. Mon point est, qu'après la création, vous ne pouvez plus éditer l'interface utilisateur sur le dialogue. La façon dont cela fonctionne est en remplaçant le onCreateDialog(int id) dans votre code, en créant un AlertDialog.Builder (ou quoi que ce soit vous basez votre Dialog sur: ProgressDialog/AlertDialog/etc.) Et en définissant le titre, la disposition et les boutons ici. Après cela, vous pouvez appeler la méthode create(), qui va réellement construire le Dialog avec vos paramètres.

@Override 
public dialog onCreateDialog(int id){ 
    // Create the View to use in the Dialog. 
    LayoutInflater inflater = getLayoutInflater(); 
    // Inflate the View you want to set as the layout. 
    final View layout = inflater.inflate(R.layout.your_dialog_layout, 
             (ViewGroup) findViewById(R.id.your_parent_view); 
    // Create Dialog Builder Object to create Dialog from. 
    AlertDialog.Builder adBuilder = new AlertDialog.Builder(this); 
    // Set the title to use. 
    adBuilder.setMessage("Your title"); 
    // Add only a positive button. 
    adBuilder.setPositiveButton("Add", new DialogInterface.OnClickListener(){ 
     @Override 
     public void onClick(DialogInterface dialog, int which){ 
      // Handle click on positive button here. 
     } 
    }; 
    // Set the layout which you want to use (inflated at the beginning). 
    adBuilder.setLayout(layout); 
    // After you've set all the options you want to set, call this method. 
    AlertDialog dialog = adBuilder.create(); 
    return dialog; 
} 

Cela va créer un Dialog avec le titre réglé sur « Votre titre », qui utilise la mise en page que vous avez spécifié, et a un bouton avec le texte « Ajouter ». Notez que la principale différence entre les boutons positifs, neutres et négatifs est que leur disposition sur le Dialog est modifiée en conséquence (positif = gauche, neutre = moyen et négatif = droit).

Pour plus d'informations, je vous conseille de consulter la documentation à ce sujet.

16

En utilisant une partie de votre extrait:

public void customDialog() { 
    Dialog dialog=new Dialog(this); 
    dialog.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    dialog.setContentView(R.layout.dialog_submit); 
    dialog.getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 
    dialog.show(); 
} 

res/layout/custom_title.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="This is a custom title"/> 
+0

merci pour un commentaire utile – farhad

0

Pourquoi ne pas utiliser un AlertDialog si vous avez 3 ou moins de boutons?

Mon AlertDialog ressemble à ceci:

enter image description here

Mon code java:

LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.add_filter, null); 

AlertDialog alertDialog = new AlertDialog.Builder(this) 
     .create(); 
alertDialog.setTitle("AlertDialog title"); 
alertDialog.setMessage("AlertDialog message"); 
alertDialog.setView(view); 
alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", 
     new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, 
        int which) { 
       dialog.dismiss(); 
      } 
     }); 
alertDialog.show(); 

Mon XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" > 

    <Spinner 
     android:id="@+id/spinner_filter" 
     android:layout_width="wrap_content" 
     android:spinnerMode="dropdown" 
     android:layout_height="wrap_content" 
     android:entries="@array/filter_array" 
     android:prompt="@string/filter_prompt" /> 

</LinearLayout> 

simple ne encore ce que vous avez besoin.

0

Cette question est ancienne, mais ma solution utilise une disposition relative dans la disposition relative principale. De cette façon, vous pouvez créer votre propre titre. Il ne voit pas un haut TextView comme titre si vous utilisez cette façon:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="10dp" 
     > 
<RelativeLayout 
     android:id="@+id/layout_root" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 
<TextView android:id="@+id/txt_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#FFF" 
     android:text="Name" 
     android:textStyle="bold" 
     /> 
<EditText android:id="@+id/edit_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/txt_name" 
     /> 
<TextView android:id="@+id/txt_model" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#FFF" 
     android:layout_below="@+id/edit_name" 
     android:text="Phone Model" 
     /> 
<TextView android:id="@+id/edit_model" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/txt_model" 
     /> 

<Button android:id="@+id/but_cancel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/edit_model" 
     android:text="Cancel"  
     /> 
<Button android:id="@+id/but_submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/edit_model" 
     android:layout_toRightOf="@+id/but_cancel"  
     android:text="Submit"  
     /> 
</RelativeLayout>      
</RelativeLayout> 

Cela semble être la meilleure façon.

0

S'il vous plaît utiliser cette ligne pour cacher intégrée dans le titre de dialogue

dialog.requestWindowFeature (Window.FEATURE_NO_TITLE);

et d'ajouter textView dans votre fichier de format.

Questions connexes