276 votes

Android: Comment créer une boîte de Dialogue sans titre?

Je suis en train de générer un dialogue personnalisé dans Android. Je crée ma boîte de Dialogue comme ceci:

dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);

Tout fonctionne bien sauf pour le titre de la boîte de Dialogue. Même si je n'ai pas mis le titre de la boîte de dialogue la boîte de dialogue popup a un espace vide à la position de la boîte de dialogue.

Est-il possible de cacher cette partie de la boîte de Dialogue?

Je l'ai essayé avec un AlertDialog mais il semble que la mise en page n'est pas définie correctement:

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

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);

// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);

dialog = builder.create();

((TextView) dialog.findViewById(R.id.nr)).setText(number);

Si j'utilise ce code j'obtiens une Exception de Pointeur null dans la dernière ligne. La boîte de dialogue n'est pas nulle, donc le TextView j'essaie de récupérer n'existe pas.
Si je dé-commenter la partie où j'ai utiliser la boîte de Dialogue Constructeur tout fonctionne bien, mais pour le titre au-dessus de ma boîte de dialogue mise en page.

586voto

olivierg Points 7200

FEATURE_NO_TITLE œuvres lors de la création d'une boîte de dialogue à partir de zéro, comme dans:

Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

Mais il ne fonctionne pas lors de la création d'un AlertDialog (ou en utilisant le Générateur de rapports), car il déjà désactive le titre et utiliser un programme personnalisé en interne.

J'ai regardé le SDK sources, et je pense qu'il ne peut pas être contourné. Afin de retirer le haut de l'espacement, la seule solution est de créer un dialogue personnalisé à partir de zéro de l'OMI, à l'aide de la classe de boîte de Dialogue directement.

Aussi, on peut le faire avec un style, par exemple, dans styles.xml:

<style name="FullHeightDialog" parent="android:style/Theme.Dialog">
   <item name="android:windowNoTitle">true</item>
</style>

Et puis:

Dialog dialog = new Dialog(context, R.style.FullHeightDialog);

213voto

Steve Haley Points 26928

Vous devez utiliser un AlertDialog. Il y a une bonne explication sur l'Android du Développeur de site sur les boîtes de dialogue personnalisées.

En très bref résumé, vous le faites avec un code comme copié ci-dessous à partir du site officiel. Qui prend une coutume layot fichier, la gonfle, il donne un texte de base et l'icône, puis crée. Vous la montrer ensuite, il avec alertDialog.show().

AlertDialog.Builder builder;
AlertDialog alertDialog;

Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater)
        mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,
        (ViewGroup) findViewById(R.id.layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();

Edit en réponse à montré code:

Je suppose que TextView avec l'id nr est dans la Vue de vous gonfler avec View view = inflater..... Si oui, alors vous avez besoin de changer un peu: au lieu de dialog.findView... faire view.findView.... Ensuite, une fois que vous l'avez fait, n'oubliez pas d'utiliser la boîte de dialogue.show(), ou même constructeur.show() sans se soucier de faire du générateur.create().

67voto

Donal Rafferty Points 7914

Dans votre code, ajoutez cette ligne

requestWindowFeature(Window.FEATURE_NO_TITLE);  

Ou dans l'utilisation de XML un thème

android:theme="@android:style/Theme.NoTitleBar"

XML serait une meilleure mise en œuvre qu'avec la version du code de la barre de titre est créé puis supprimé ce qui est un gaspillage de ressources

Ok bon d'essayer mais ça ne fonctionne pas. J' obtenir: android.vue.WindowManager$BadTokenException: Impossible d'ajouter de la fenêtre -- jeton est null pas pour une demande si je veux shwo la boîte de dialogue.

Changement de la boîte de dialogue d'alerte de type de système de dialogue ( par exemple, TYPE_SYSTEM_OVERLAY ) et voir si cela résout votre problème

61voto

alok tiwari Points 347

utiliser comme ceci

Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

cela permettra d'éliminer toute la barre de titre de la fenêtre de dialogue.

merci, -alok

38voto

shailendra Points 359

vous pouvez supprimer le titre par

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

où le dialogue est le nom de ma boîte de dialogue .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X