我的應用程序的主要活動是在清單中設置爲始終處於縱向視圖。當我將應用程序加載到平板電腦上時,此工作正常。AlertDialog顯示與方向橫向戶型景觀景觀
然而,當我用我的菜單按鈕,然後點擊「設置」,打開一個AlertDialog
是膨脹的XML佈局,平板電腦將顯示左側2/3左右整個對話。其餘部分在屏幕右側。這種情況下,只有當我在平板電腦上安裝我的應用程序,而在橫向模式下抱着它,或者如果我把平板電腦橫向模式而應用程序沒有運行(即使我回去人像,然後點擊應用程序)發生。該對話甚至調用this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
以確保它保持縱向(即使問題仍然存在於此調用中)。
換句話說,所述AlertDialog
正在顯示在縱向視圖的方式是,它是炸燬一個橫向視圖(以及因此它的一些去離屏),即使AlertDialog
的實際取向是肖像,像它應該。
(我道歉,如果上述措辭令人困惑 - 問我澄清任何事情,如果需要的。)
那麼,爲什麼平板電腦做到這一點?我已經在幾款Android手機上測試過了,這種情況不會發生,所以我不明白爲什麼平板電腦會這樣做。
旁註:
這甚至不是發生了眼前這個
AlertDialog
要麼..我的EULA顯示在應用的開始(另一AlertDialog
)也出現,如果我這種方式啓動橫向模式下的應用程序。我甚至通過擺脫指定縱向/橫向模式的所有呼叫來允許景觀的可用性,並且當在平板電腦上以縱向視圖進行拍攝時,平板電腦仍將對話框消費在屏幕外手機。
編輯:
此代碼工作以及在手機上,但平板電腦的問題仍然存在。如果我下面取消註釋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;
}
您有沒有其他解決方案比下面的答案 – 2016-08-30 16:29:35