2012年5月24日木曜日

Android Dialog の大きさを自分で設定する

毎回、過去に実装したアプリのコードを見るのがめんどいのでメモしておきます。

例えば、入力欄のあるオリジナルのダイアログを作るとします。

  1. public void showOriginalDialog(Context context) {  
  2.   
  3.     LinearLayout ll = new LinearLayout(context);  
  4.     ll.setOrientation(LinearLayout.VERTICAL);  
  5.   
  6.     TextView tv = new TextView(context);  
  7.     tv.setText("お名前を入力してください。");  
  8.   
  9.     EditText et = new EditText(context);  
  10.   
  11.     ll.addView(tv);  
  12.     ll.addView(et);  
  13.   
  14.     Dialog dialog = new Dialog(context);  
  15.     dialog.setContentView(ll);  
  16.     dialog.setTitle("アカウント作成");  
  17.   
  18.     dialog.show();  
  19. }  
この場合、次のようにダイアログの幅は TextView の幅、つまり「お名前を入力してください。」の幅になります。



3.0 以降は Theme.Holo.Dialog がデフォルトのテーマになり、一定の幅のダイアログになります。また、Theme.Holo.Dialog.MinWidth というテーマだとそれよりもさらに少し幅が広いダイアログになります。

しかし 3.0 以前では、デフォルトでは上記のようにダイアログの幅はコンテンツがちょうど収まる幅になってしまいます。

ダイアログの幅を自分で設定し、例えば画面の幅の8割にするには、次のように WindowManager.LayoutParams で指定します。
  1. public void showOriginalDialog(Context context) {  
  2.   
  3.     DisplayMetrics metrics = getResources().getDisplayMetrics();  
  4.     int dialogWidth = (int) (metrics.widthPixels * 0.8);  
  5.   
  6.     ...  
  7.   
  8.     Dialog dialog = new Dialog(context);  
  9.     dialog.setContentView(ll);  
  10.     dialog.setTitle("アカウント作成");  
  11.   
  12.     WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();  
  13.     lp.width = dialogWidth;  
  14.     dialog.getWindow().setAttributes(lp);  
  15.   
  16.   
  17.     dialog.show();  
  18. }  




また、ダイアログが表示される位置も変えることができます。デフォルトではセンターですが、ダイアログを下部に表示したい場合は
  1. dialog.getWindow().setGravity(Gravity.BOTTOM);  
のように、ダイアログの Window に setGravity() で位置を指定します。






0 件のコメント:

コメントを投稿