AlertDialog exibe a exibição em tamanho de paisagem com orientação na paisagem

atividade principal do @My app é definida no manifesto para sempre estar na exibição de retrato. Isso funciona bem quando carrego o aplicativo no tablet.

No entanto, quando uso meu botão de menu e clico em "Configuração", que abre umAlertDialog que infla um layout xml, o tablet exibirá os 2/3 à esquerda ou mais da caixa de diálogo inteira. O resto fica fora da tela para a direita. Esse caso ocorre apenas se eu instalar o aplicativo no tablet enquanto o mantém no modo paisagem ou se eu colocar o tablet no modo paisagem enquanto o aplicativo não estiver em execução (mesmo se eu voltar ao Portrait e clicar no aplicativo). A caixa de diálogo chamathis.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); para garantir que ele permaneça em retrato (mesmo que o problema persista com essa ligação ou não

Em outras palavras, a maneira como oAlertDialog está sendo exibido no modo retrato, porque está exibindo uma paisagem (e, portanto, parte dela fica fora da tela), mesmo que a orientação real doAlertDialog é retrato, como deveria ser.

(Peço desculpas se o texto acima foi confuso - peça esclarecimentos, se necessário.)

Então, por que o tablet faria isso? Eu testei em alguns telefones celulares Android e isso não acontece, então não entendo por que o tablet fará isso.

NOTAS LATERAIS:

Isto nem está ocorrendo apenas por issoAlertDialog qualquer um .. meu EULA exibido no início do aplicativo (outroAlertDialog) também aparece assim se eu iniciar o aplicativo no modo paisage

Até permiti a usabilidade da paisagem, eliminando todas as chamadas para especificar o modo retrato / paisagem, e o tablet ainda está gastando a caixa de diálogo fora da tela quando mantido na vista retrato apenas no tablet, mas não nos telefone

EDITAR

Este código funciona bem no telefone, mas o problema do tablet ainda persiste. Se eu descomentardialog.show(); abaixo, o tablet e o telefone exibem as dimensões desejadas, mas na escuridão, em vez da tela principal esmaecida. Alguma ideia

função @Calling faz isso:

showDialog(EXAMPLE_CASE);

Função que é chamada pela função de chamada:

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

questionAnswers(2)

yourAnswerToTheQuestion