2011年10月23日日曜日

Android Custom Dialogの上下の空間

AlertDialogでlist形式にしたいときは、setItemsやsetMultiChoiceItemsとかsetSingleChoiceItemsとかを使えば良いけど,アイコン+テキストにして見せたいときにはこれはダメ。
Creating a Custom Dialog | Android Developersにあるようにxml用意して、設定してやれば良い。

とりあえず例を参考に下記のようにAlertDialogを準備して、ボタンを押したらshowするようにした。
        View dialogView = View.inflate(this, R.layout.dialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Custom Dialog").setView(dialogView);
        alertDialog = builder.create();

用意したxmlは表示されるけど、その上下に微妙に空間ができてしまった。。

で調べる。

AlertDialog.BuilderのsetViewでは設定できないけど、AlertDialogだとpublic void setView (View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight, int viewSpacingBottom)で設定できそう。

下記のように書き換える。
        View dialogView = View.inflate(this, R.layout.dialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Custom Dialog");
        alertDialog = builder.create();
        alertDialog.setView(dialogView, 0, 0, 0, 0);


スペースは消えてくれたので、やりたいことはできた。

ただ、builderでbuild(タイトルとかボタンとかのset)をしてcreateされたdialogに、Viewをsetしてやるのはなんとなく気持ち悪さが残る。setは全てbuilderでできる気がしてたので。