ダイアログの幅をカスタマイズするなら、Dialogクラスを使った方がダイアログの幅はいじりやすいです。こちらでされてるように、
・Y.A.M の 雑記帳: Android Dialog の大きさを自分で設定する
http://y-anz-m.blogspot.jp/2012/05/androiddialog.html
AlertDialog.Builderをいじるときは、ちょっとハマったのでメモしておきます。
環境
Windows7
JDK1.7
Eclipse 3.7 Indigo Service Release 2
Android 2.1
幅を指定しないと…
AlertDialog.Builderでも、setTitle("hogehoge");のように、タイトルを設定してやれば、特に幅を気にすることもないかもしれません。このように適切な幅で表示してくれます。
しかし、setTitle()をしないで、XMLファイルからレイアウトを読み込んだりすると、そのXMLファイルのレイアウト幅で表示されてしまいます。
幅を指定する
ググったらこちらにやり方が載ってましたが、
・android - How to make an alert dialog fill 90% of screen size? - Stack Overflow
http://stackoverflow.com/questions/2306503/how-to-make-an-alert-dialog-fill-90-of-screen-size
背景が真っ黒になったりするので、微調整しました。AlertDialog.Builderに対して、もしくはAlertDialog.Builderを継承したクラス内に記述してやれば良いでしょう。R.layout.dialog_layoutはボタンのみが配置されてるXMLファイルです。
// XMLファイルからレイアウトを読み込む
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.dialog_layout, null);
setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// OKボタンをクリックした時の処理
dialog.cancel();
}
});
setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Cancelボタンをクリックした時の処理
dialog.cancel();
}
});
setView(view);
Dialog d = create();
d.show();
LayoutParams lp = d.getWindow().getAttributes();
lp.width = LayoutParams.FILL_PARENT;
d.getWindow().setAttributes(lp);
こんな感じ
また、画面幅の求め方は、以下のように(Activityでの例)
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Display disp = wm.getDefaultDisplay();
int width = (int)(disp.getWidth() * 0.8);
int widthの値は画面幅80%を求めています。これをさっきのlp.widthに指定してやれば良いです。
ソース
初めてGithubにアップロードしてみました。※変なスペルが混ざってしまいましたが…
AlertDialog.Builderを継承したクラス(CustomAlertDialog)をActivityから呼び出すものです。CustomAlertDialogでは、サイズを指定した場合とそうでない場合の2種類のコンストラクタを用意しています。サイズが指定されなかった場合は、LayoutParams.FILL_PARENTの幅として表示されます。
・takaiwa/CustomWidthAlerDialog · GitHub
コメント
コメントを投稿