ずっとやり方が分からなくて。苦手なテーマをいじったり、
自分でレイアウトを作ってみたり、色々やってたんすが、
ダイアログの下部に余白が残ってしまったりと、うまく
表示できなかったんです。
で、やっとやり方がわかったので書いてみました。
下記みたいなコードを書くと...
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行に収まるようにします。
そんなかんじー。

