Question

L'activité principale de mon application est définie dans le manifeste pour qu'elle soit toujours en mode portrait.Cela fonctionne bien lorsque je charge l'application sur la tablette.

Cependant, lorsque j'utilise mon bouton de menu et que je clique sur "Configuration", ce qui ouvre un AlertDialog qui gonfle une mise en page XML, la tablette affichera environ les 2/3 gauche de la boîte de dialogue entière.Le reste passe hors écran vers la droite.Ce cas ne se produit que si j'installe mon application sur la tablette en la maintenant en mode paysage ou si je mets la tablette en mode paysage alors que l'application n'est pas en cours d'exécution (même si je retourne en Portrait et clique sur l'application).Le dialogue appelle même this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); pour être sûr qu'il reste en portrait (même si le problème persiste avec cet appel ou non).

En d'autres termes, la façon dont le AlertDialog est affiché en mode portrait, c'est qu'il agrandit une vue paysage (et donc une partie sort de l'écran), même si l'orientation réelle de l'image est affichée en mode portrait. AlertDialog C'est un portrait, comme il se doit.

(Je m'excuse si la formulation ci-dessus prête à confusion - demandez-moi de clarifier quoi que ce soit si nécessaire.)

Alors pourquoi la tablette ferait-elle cela ?Je l'ai testé sur quelques téléphones mobiles Android et cela n'arrive pas, donc je ne comprends pas pourquoi la tablette fera cela.

NOTES CÔTÉES :

  • Cela n'arrive même pas juste pour ça AlertDialog soit..mon CLUF qui s'affiche au début de l'application (un autre AlertDialog) apparaît également de cette façon si je démarre l'application en mode paysage.

  • J'ai même permis l'utilisation du mode paysage en supprimant tous les appels pour spécifier le mode portrait/paysage, et la tablette continue d'afficher la boîte de dialogue hors écran lorsqu'elle est maintenue en mode portrait uniquement sur la tablette, mais pas sur les téléphones.

MODIFIER:

Ce code fonctionne bien sur le téléphone, mais le problème de la tablette persiste.Si je décommente dialog.show(); ci-dessous, la tablette et le téléphone affichent les dimensions que je souhaite, mais dans le noir au lieu de l'écran principal grisé.Des idées?

La fonction appelante fait ceci :

showDialog(EXAMPLE_CASE);

Fonction appelée par la fonction appelante :

protected Dialog onCreateDialog(final int id) {
        Dialog dialog;
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        Display display = getWindowManager().getDefaultDisplay(); 
        int mwidth = display.getWidth();
        int mheight = display.getHeight();

        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();

        switch(id) {
        // Example of what all my cases look like (there were way too many to copy)
        case EXAMPLE_CASE:

            builder.setTitle("Example")
            .setMessage("Example message")
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialoginterface,int i) {
                    dialoginterface.dismiss();
                    showDialog(DIALOG_CHOICE);
                }
            })
           .setCancelable(false);

            dialog = builder.create();

            break;
        }


        if (dialog != null) {

            lp.copyFrom(dialog.getWindow().getAttributes());
            lp.width = mwidth;
            lp.height = mheight;
            lp.x = mwidth;
            //lp.y = mheight;
            lp.dimAmount=0.0f;
            //dialog.show();
            dialog.getWindow().setAttributes(lp);
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

            dialog.setOnDismissListener(new OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    removeDialog(id);
                }
            });
        }

    return dialog;
}
Était-ce utile?

La solution

Vous pouvez essayer d'obtenir les dimensions de l'écran comme ceci :

Display display = getWindowManager().getDefaultDisplay(); 
int mwidth = display.getWidth();
int mheight = display.getHeight();

Et puis modifiez le Dialog comme ça:

AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)

d.show();

WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = mwidth;
lp.height = myheight;

//change position of window on screen
lp.x = mwidth/2; //set these values to what work for you; probably like I have here at
lp.y = mheight/2;        //half the screen width and height so it is in center

//set the dim level of the background
lp.dimAmount=0.1f; //change this value for more or less dimming

d.getWindow().setAttributes(lp);

//add a blur/dim flags
d.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND | WindowManager.LayoutParams.FLAG_DIM_BEHIND);

De plus, vous dites que vous gonflez une mise en page personnalisée.Avez-vous essayé de bricoler le layout_height et layout_width des vues dans cette mise en page pour voir si cela fait une différence ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top