Основная активность моего приложения установлена в манифесте, чтобы всегда быть в книжной ориентации.Это прекрасно работает, когда я загружаю приложение на планшет.
Однако, когда я использую кнопку меню и нажимаю «Настройка», которая открывает AlertDialog
, который раздувает макет XML, планшет будет отображать левую2/3 или около того всего диалога.Все остальное уходит за экран вправо.Этот случай возникает только в том случае, если я устанавливаю свое приложение на планшет, удерживая его в альбомном режиме, или если я переключаю планшет в альбомный режим, когда приложение не запущено (даже если я вернусь в «Портрет» и нажму на приложение).В диалоговом окне даже вызывается this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
, чтобы убедиться, что он остается в портретном режиме (даже если проблема сохраняется с этим вызовом или нет).
Другими словами, способ отображения AlertDialog
в портретном режимечто он взрывает ландшафтный вид (и, следовательно, часть его выходит за экран), даже если фактическая ориентация AlertDialog
является портретной, как и должно быть.
(я извиняюсь, если приведенная выше формулировка быласбивает с толку - попросите уточнить что-нибудь, если это необходимо.)
Так зачем планшету это делать?Я тестировал его на нескольких мобильных телефонах Android, и этого не происходит, поэтому я не понимаю, почему планшет будет это делать.
ПОБОЧНЫЕ ПРИМЕЧАНИЯ:
Это даже не происходит только для этого AlertDialog
либо .. мое лицензионное соглашение, которое отображается в начале приложения (другое AlertDialog
), также отображается таким образом, если я запускаю приложение в альбомной ориентацииmode.
Я даже позволил использовать альбомную ориентацию, избавившись от всех вызовов, чтобы задать портретный / альбомный режим, и планшет по-прежнему выводит диалоговое окно за пределы экрана, когда удерживается вкнижная ориентация только на планшете, но не на телефонах.
РЕДАКТИРОВАТЬ:
Этот код хорошо работает на телефоне, но проблема планшетавсе еще сохраняется.Если я раскомментирую dialog.show();
ниже, планшет и телефон отобразят нужные мне размеры, но на черном фоне вместо затемненного основного экрана.Есть идеи?
Вызывающая функция делает это:
showDialog(EXAMPLE_CASE);
Функция, которая вызывается вызывающей функцией:
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;
}