読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

DatePickerDialogのタイトル

Android


次のようにDatePickerDialogを使うと

// 今日の日付を取得
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// DatePickerDialogを表示
DatePickerDialog datePickerDialog = new DatePickerDialog(mActivity, null, year, month, day);
datePickerDialog.show();


下のようなダイアログが表示されますが、日付を変えるたびに赤枠のところも変わってしまいます。
書式とかも指定ができません。
f:id:STAR_ZERO:20101018234251p:image




もし、この動きがイヤな場合はDatePickerを使ってダイアログを自作することで可能です。

// AlertDialog.Builderを生成
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
// DatePickerを生成
DatePicker datePicker = new DatePicker(mActivity);
// ViewにDatePickerを設定
builder.setView(datePicker);
// タイトルを設定(今日の日付)
builder.setTitle("日付選択");
// Setボタンを設定
builder.setPositiveButton("Set", null);
// Cancelボタンを設定
builder.setNegativeButton("Cancel", null);
// AlertDialogを生成
AlertDialog alertDialog = builder.create();
// AlertDialogを表示
alertDialog.show();


上のように書くと下のようになり、日付を変更してもタイトルは変更されません。
例ではsetPositiveButtonとsetNegativeButtonの第二引数にnullを設定していますが、SetボタンとCancelボタンのイベントをココに書くようにしてください。
f:id:STAR_ZERO:20101019000022p:image




DatePickerのinitメソッドを使えば、初期値と変更時のイベント行うことが出来ます。

// 今日の日付を取得
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// AlertDialog.Builderを生成
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
// DatePickerを生成
DatePicker datePicker = new DatePicker(mActivity);
builder.setView(datePicker);
// タイトルを設定(今日の日付)
builder.setTitle(String.valueOf(year) + "/" + String.valueOf(month + 1) + "/" + String.valueOf(day));
builder.setPositiveButton("Set", null);
builder.setNegativeButton("Cancel", null);
final AlertDialog alertDialog = builder.create();
alertDialog.show();
// 初期値と変更時のイベントを設定
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        alertDialog.setTitle(String.valueOf(year) + "/" + String.valueOf(monthOfYear + 1) + "/" + String.valueOf(dayOfMonth));
    }
});

最後のinitでDatePickerが変更されるたびにタイトルがyyyy/m/dで表示されるようにしています。

f:id:STAR_ZERO:20101019002654p:image


DatePickerドキュメント
DatePicker | Android Developers