4.xのDatePickerでは従来のピッカーの他にカレンダーも選択できる。
すごく便利。
今回はlayout.xmlでボタンを設置して、
ボタンを押すと、カレンダー or ピッカーが出るようにする。
ただ、xmlはボタンを置くだけなので省略。
以下のコードで 「ピッカー+カレンダー」が画面中央にモーダルで表示される。
public class MainActivity extends Activity { private DatePickerDialog mDatePickerDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //DatePickerDialogを作る。 final Calendar calendar = Calendar.getInstance(); final int year = calendar.get(Calendar.YEAR); final int month = calendar.get(Calendar.MONTH); final int day = calendar.get(Calendar.DAY_OF_MONTH); mDatePickerDialog = new DatePickerDialog( MainActivity.this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Toast.makeText(MainActivity.this, String.valueOf(dayOfMonth), Toast.LENGTH_SHORT).show(); } }, year, month, day ); //カレンダーを表示させるボタン Button showCal = (Button)findViewById(R.id.openCal); showCal.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDatePickerDialog.show(); } }); } }
ただ、普通はピッカーorカレンダーの片方のみを表示させると思うので、
どちらかを消す。
mDatePickerDialog.getDatePicker().setSpinnersShown(false); //ピッカーを消す mDatePickerDialog.getDatePicker().setCalendarViewShown(false); //カレンダーを消す
カレンダーの左端に表示されている週は以下で消える。
mDatePickerDialog.getDatePicker().getCalendarView().setShowWeekNumber(false);
ボタンのテキストを変更したい or 複数のボタンでコールバックが必要な時は以下のようにする。
mDatePickerDialog.setButton(DatePickerDialog.BUTTON_POSITIVE, "ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //何かの処理 } });