Comment contrôler la largeur et la hauteur de la boîte de dialogue par défaut dans Android?
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
j'utilise le code ci-dessus pour afficher un dialogue D'alerte. Par défaut, il remplit l'écran en largeur et wrap_content en hauteur.
Comment puis-je contrôler la largeur et la hauteur de la boîte de dialogue d'alerte par défaut ?
J'ai essayé:
alert.getWindow().setLayout(100,100); // It didn't work.
comment obtenir les paramètres de mise en page sur la fenêtre d'alerte et régler manuellement la largeur et la hauteur?
6 réponses
seulement un léger changement dans le Code Sat, définir la disposition après la méthode de show () d'alertDialog.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
alertDialog = builder.create();
alertDialog.show();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.
"151920920 Ou vous pouvez le faire à ma manière.
alertDialog.show();
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(alertDialog.getWindow().getAttributes());
lp.width = 150;
lp.height = 500;
lp.x=-170;
lp.y=100;
alertDialog.getWindow().setAttributes(lp);
Ok, je peux contrôler la largeur et la hauteur en utilisant la classe Builder. J'ai utilisé
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
AlertDialog alertDialog = builder.create();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.
alertDialog.show();
avant d'essayer d'ajuster la taille post-layout, Vérifiez d'abord quel style votre dialogue utilise. Assurez-vous que rien dans les ensembles d'arbre de style
<item name="windowMinWidthMajor">...</item>
<item name="windowMinWidthMinor">...</item>
si cela se produit, c'est aussi simple que de fournir son propre style au [constructeur qui accepte un themeResId] ( http://developer.android.com/reference/android/app/AlertDialog.Builder.html#AlertDialog.Builder(android.content.Contexte , int)) disponible API 11+
<style name="WrapEverythingDialog" parent=[whatever you were previously using]>
<item name="windowMinWidthMajor">0dp</item>
<item name="windowMinWidthMinor">0dp</item>
</style>
cela fonctionne aussi bien en ajoutant .getWindow().setLayout(width, height)
après show()
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
MainActivity.this.finish();
}
})
.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
}).show().getWindow().setLayout(600,500);
Je ne sais pas si vous pouvez changer la hauteur/largeur par défaut D'AlertDialog mais si vous voulez le faire, je pense que vous pouvez le faire en créant votre propre dialogue personnalisé. Vous avez juste à donner android:theme="@android:style/Theme.Dialog"
dans le manifeste android.xml pour votre activité, et peut écrire l'ensemble de la mise en page selon vos besoins. vous pouvez définir la hauteur et la largeur de votre dialogue personnalisé à partir de la ressource Android XML.
si vous voulez ajouter la largeur dynamique et la hauteur basée sur votre cadre d'appareil, vous pouvez faire ces calculs et assigner la hauteur et la largeur.
AlertDialog.Builder builderSingle = new
AlertDialog.Builder(getActivity());
builderSingle.setTitle("Title");
final AlertDialog alertDialog = builderSingle.create();
alertDialog.show();
Rect displayRectangle = new Rect();
Window window = getActivity().getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
alertDialog.getWindow().setLayout((int)(displayRectangle.width() *
0.8f), (int)(displayRectangle.height() * 0.8f));
P. S : afficher d'abord la boîte de dialogue et ensuite essayer de modifier les attributs de mise en page de la fenêtre