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