2012-02-24 12 views
2

マニフェストの主なアクティビティは、常にポートレート表示に設定されています。これは、タブレットにアプリケーションを読み込むときに正常に動作します。AlertDialogは、風景で横長の横長表示を表示します。

しかし、メニューボタンを使用して「設定」をクリックすると、xmlレイアウトを膨らませるAlertDialogが開きます。タブレットには、ダイアログ全体の2/3程度が表示されます。残りの部分はオフスクリーンで右側に表示されます。このケースは、アプリを横向きモードで保持しているときにタブレットにアプリをインストールした場合、またはアプリが実行されていないときにタブレットを横向きにすると発生します(縦に戻ってアプリをクリックしても)。このダイアログでは、this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);に電話をかけても、(この呼び出しで問題が解決しなくても)ポートレートをそのままにしておくことができます。

つまり、AlertDialogの表示方法は、AlertDialogの実際の向きが似ているにもかかわらず、横向きの表示が吹き飛ばされているため(一部がオフスクリーンになる)すべきだ。

(上記の文言が混乱した場合、私は謝罪 - 。必要であれば、何かを明確にする私に尋ねる)

なぜタブレットはこれを行うだろうか?私はいくつかのアンドロイド携帯電話でそれをテストしたが、これは起こらないので、なぜタブレットがこれを行うのか分からない。

SIDE注意事項:私は起動する場合、アプリ(別のAlertDialog)の開始時に表示されるだけで、このAlertDialog ..私のEULAのいずれかでもこの​​方法を表示されたため

  • これも発生していませんアプリはランドスケープモードです

  • 私は、ポートレート/ランドスケープモードを指定するすべての呼び出しを取り除くことによってランドスケープの使い勝手を可能にしました。タブレットでポートレートビューで保持しても、電話。

EDIT:

このコードは、電話でうまく動作しますが、タブレットの問題が解決しません。下の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

以下の回答以外は解決しましたか? –

答えて

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_heightlayout_widthを修正してみましたか?

関連する問題