2012-02-24 51 views
2

我的應用程序的主要活動是在清單中設置爲始終處於縱向視圖。當我將應用程序加載到平板電腦上時,此工作正常。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; 
} 
+0

您有沒有其他解決方案比下面的答案 – 2016-08-30 16:29:35

回答

7

你可以嘗試讓屏幕尺寸是這樣的:

Display display = getWindowManager().getDefaultDisplay(); 
int mwidth = display.getWidth(); 
int mheight = display.getHeight(); 

而且然後改變Dialog這樣的:

AlertDialog.Builder adb = new AlertDialog.Builder(this); 
Dialog d = adb.setView(new View(this)).create(); 
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.) 

d.show(); 

WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
lp.copyFrom(d.getWindow().getAttributes()); 
lp.width = mwidth; 
lp.height = myheight; 

//change position of window on screen 
lp.x = mwidth/2; //set these values to what work for you; probably like I have here at 
lp.y = mheight/2;  //half the screen width and height so it is in center 

//set the dim level of the background 
lp.dimAmount=0.1f; //change this value for more or less dimming 

d.getWindow().setAttributes(lp); 

//add a blur/dim flags 
d.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND | WindowManager.LayoutParams.FLAG_DIM_BEHIND); 

而且,你說你是膨脹的自定義佈局。您是否嘗試過與layout_height,並在該佈局的意見layout_width擺弄,看看是否有差別?