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?

53
demandé sur jaysoifer 2010-12-10 11:04:57

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);
162
répondu PiyushMishra 2011-09-12 06:14:33

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();
25
répondu sat 2017-04-27 08:34:26

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>
9
répondu tir38 2017-05-05 14:23:51

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);
8
répondu Señorhak 2015-03-09 14:37:01

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.

4
répondu MegaMind 2010-12-15 06:57:06

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

3
répondu Sid 2018-03-09 21:16:41