AlertDialog muestra una vista de tamaño horizontal con orientación en horizontal

a actividad principal de @Mi aplicación está configurada en el manifiesto para estar siempre en vista vertical. Esto funciona bien cuando cargo la aplicación en la tableta.

in embargo, cuando uso mi botón de menú y hago clic en "Configuración", que abre unAlertDialog que infla un diseño xml, la tableta mostrará la izquierda 2/3 más o menos de todo el diálogo. El resto se sale de la pantalla a la derecha. Este caso solo ocurre si instalo mi aplicación en la tableta mientras la sostengo en modo horizontal o si pongo la tableta en modo horizontal mientras la aplicación no se está ejecutando (incluso si vuelvo a Vertical y hago clic en la aplicación). El diálogo incluso llama athis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); para asegurarse de que permanezca en vertical (aunque el problema persista con esta llamada o no).

n otras palabras, la forma en que elAlertDialog se muestra en la vista vertical es que está haciendo explotar una vista horizontal (y, por lo tanto, parte de ella se sale de la pantalla), aunque la orientación real de laAlertDialog es vertical, como debería ser.

(Pido disculpas si la redacción anterior fue confusa; pídame que aclare algo si es necesario).

Entonces, ¿por qué la tableta haría esto? Lo probé en algunos teléfonos móviles con Android y esto no sucede, así que no entiendo por qué la tableta hará esto.

NOTAS LATERALES:

Esto ni siquiera ocurre solo por estoAlertDialog o bien .. mi EULA que se muestra al inicio de la aplicación (otraAlertDialog) también aparece de esta manera si inicio la aplicación en modo horizontal.

Incluso he permitido la usabilidad del paisaje al deshacerme de todas las llamadas para especificar el modo vertical / horizontal, y la tableta sigue gastando el diálogo fuera de la pantalla cuando se mantiene en la vista vertical solo en la tableta, pero no en los teléfonos.

EDITAR

Este código funciona bien en el teléfono, pero el problema de la tableta aún persiste. Si descomentodialog.show(); a continuación, la tableta y el teléfono muestran las dimensiones que quiero, pero en negro en lugar de la pantalla principal atenuada. ¿Algunas ideas

a función @Calling hace esto:

showDialog(EXAMPLE_CASE);

Función que llama la función de llamada:

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;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta