ずっとやり方が分からなくて。苦手なテーマをいじったり、
自分でレイアウトを作ってみたり、色々やってたんすが、
ダイアログの下部に余白が残ってしまったりと、うまく
表示できなかったんです。
で、やっとやり方がわかったので書いてみました。
下記みたいなコードを書くと...
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setTitle("こんばんわ"); builder.setMessage("一杯いかが?"); builder.setPositiveButton("ちょうだい", null); builder.setNeutralButton("うーん", null); builder.setNegativeButton("いいやまたあとで", null); Dialog dialog = builder.create(); dialog.show();
こんな感じでボタン幅が均等になって、ボタンラベルが
2行になっちゃいます。うまくシュリンクしてくれれば
1行で収まるのに...
そんな時には、下記のように書くと...
final int WC = LinearLayout.LayoutParams.WRAP_CONTENT; final int FP = LinearLayout.LayoutParams.FILL_PARENT; final LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(WC, FP, 1); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(android.R.drawable.ic_dialog_info); builder.setTitle("こんばんわ"); builder.setMessage("一杯いかが?"); builder.setPositiveButton("ちょうだい", null); builder.setNeutralButton("うーん", null); builder.setNegativeButton("いいやまたあとで", null); Dialog dialog = builder.create(); dialog.setOnShowListener(new OnShowListener() { public void onShow(DialogInterface dialog) { Button btnPositive = ((AlertDialog)dialog).getButton( DialogInterface.BUTTON_POSITIVE); if (btnPositive != null) { btnPositive.setLayoutParams(layoutParams); btnPositive.setSingleLine(); } Button btnNeutral = ((AlertDialog)dialog).getButton( DialogInterface.BUTTON_NEUTRAL); if (btnNeutral != null) { btnNeutral.setLayoutParams(layoutParams); btnNeutral.setSingleLine(); } Button btnNegative = ((AlertDialog)dialog).getButton( DialogInterface.BUTTON_NEGATIVE); if (btnNegative != null) { btnNegative.setLayoutParams(layoutParams); btnNegative.setSingleLine(); } } }); dialog.show();
うまく収まってくれます。ポイントは ...
- getButton() メソッドでボタンの参照がとれるけど、OnShowListener とかの DialogInterface 経由でとらないと null になっちゃいます。
- setLayoutParams() メソッドで、幅を WRAP_CONTENT に、weight を1に設定します。
- setSingleLine() メソッドで1行に収まるようにします。
そんなかんじー。