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 du dialogue d'alerte par défaut?
J'ai essayé:
alert.getWindow().setLayout(100,100); // It didn't work.
Comment obtenir les paramètres de disposition dans la fenêtre d'alerte et définir manuellement la largeur et la hauteur?
Seul un léger changement dans Sat Code, définissez la présentation après la méthode show()
de 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.
Ou tu peux le faire à ma façon.
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 après la mise en page, vérifiez d’abord le style utilisé par votre boîte de dialogue. Assurez-vous que rien dans les ensembles d'arbres de style
<item name="windowMinWidthMajor">...</item>
<item name="windowMinWidthMinor">...</item>
Si cela se produit, il suffit simplement de fournir votre propre style au [constructeur qui prend un themeResId] ( http://developer.Android.com/reference/Android/app/AlertDialog.Builder.html#AlertDialog .Builder (Android.content.Context , 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);
Si vous souhaitez ajouter une largeur et une hauteur dynamiques en fonction du cadre de votre appareil, vous pouvez effectuer ces calculs et attribuer 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: Affiche d'abord la boîte de dialogue et ensuite essaye de modifier les attributs de disposition de la fenêtre
Je ne sais pas si vous pouvez modifier 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 boîte de dialogue personnalisée. Il vous suffit de donner Android:theme="@Android:style/Theme.Dialog"
dans le fichier manifeste.xml Android pour votre activité et de pouvoir écrire la mise en page complète selon vos besoins. vous pouvez définir la hauteur et la largeur de votre boîte de dialogue personnalisée à partir du XML de ressource Android.
Pour ceux qui trouveront ce fil comme moi, voici la meilleure solution IMO (notez les 70% qui définissent la largeur minimale du dialogue en pourcentage de la largeur de l'écran):
<style name="my_dialog" parent="Theme.AppCompat.Dialog.Alert">
<item name="windowMinWidthMajor">70%</item>
<item name="windowMinWidthMinor">70%</item>
</style>
Et ensuite, appliquez ce style au dialogue:
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.my_dialog);
longButton.setOnClickListener {
show(
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" +
"1234567890-12345678901234567890123456789012345678901234567890"
)
}
shortButton.setOnClickListener {
show(
"1234567890\n" +
"1234567890-12345678901234567890123456789012345678901234567890"
)
}
private fun show(msg: String) {
val builder = AlertDialog.Builder(this).apply {
setPositiveButton(Android.R.string.ok, null)
setNegativeButton(Android.R.string.cancel, null)
}
val dialog = builder.create().apply {
setMessage(msg)
}
dialog.show()
dialog.window?.decorView?.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ ->
val displayRectangle = Rect()
val window = dialog.window
v.getWindowVisibleDisplayFrame(displayRectangle)
val maxHeight = displayRectangle.height() * 0.6f // 60%
if (v.height > maxHeight) {
window?.setLayout(window.attributes.width, maxHeight.toInt())
}
}
}
J'apprécie la réponse de Sid parce que c'est dynamique mais je veux ajouter quelque chose.
Que faire si vous souhaitez modifier uniquement la largeur, la hauteur sera telle quelle.
J'ai fait comme suit:
// All process of AlertDialog
AlertDialog alert = builder.create();
alert.show();
// Creating Dynamic
Rect displayRectangle = new Rect();
Window window = getActivity().getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
alert.getWindow().setLayout((int) (displayRectangle.width() *
0.8f), alert.getWindow().getAttributes().height);
Ici, j’ai utilisé alert.getWindow().getAttributes().height
pour conserver la hauteur car elle est de AlertDialog
et Width
sera modifiée en fonction de la résolution de l’écran.
J'espère que ça aidera. Merci.
Je pense que la réponse de tir38 est la solution la plus propre. N'oubliez pas que si vous utilisez des thèmes Android.app.AlerDialog et holo, votre style devrait ressembler à ceci:
<style name="WrapEverythingDialog" parent=[holo theme ex. Android:Theme.Holo.Dialog]>
<item name="windowMinWidthMajor">0dp</item>
<item name="windowMinWidthMinor">0dp</item>
</style>
Et si vous utilisez support.v7.app.AlertDialog ou androidx.appcompat.app.AlertDialog avec le thème AppCompat, votre style doit ressembler à ceci:
<style name="WrapEverythingDialog" parent=[Appcompat theme ex. Theme.AppCompat.Light.Dialog.Alert]>
<item name="Android:windowMinWidthMajor">0dp</item>
<item name="Android:windowMinWidthMinor">0dp</item>
</style>