ユーザに日付を入力してもらうときは、テキスト入力じゃなくてDatePickerDialogを使おう。
ってことで使ってみたら若干ハマったので残しておきます。
やりたかった事
EditTextに日付を入力できるようにする。
1.システムは、ユーザがEditTextに入力しようとする(=EditTextにフォーカスが当たる)とDatePickerDialogを表示する
2.ユーザはDatePickerDialogで日付を選択する
3.システムは、ユーザが選択した日付をEditTextに表示する
※EditTextはユーザが直接編集できないようにする
失敗した方法
はじめはEditTextにフォーカスが当たったらDatePickerDialogを表示するよう実装しました。
mDateText = (EditText)findViewById(R.id.editText1);
mDateText.setOnFocusChangeListener(new OnFocusChangeListener() {
@override
public void onFocusChange(View v, boolean hasFocus) {
Calendar calendar = Calendar.getInstance();
if (hasFocus) {
final DatePickerialg datePickerDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// 選択された日付をEditTextに表示する
}
}, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.show();
}
}
});
これで、ユーザが入力しようとEditTextをクリックした際、DatePickerDialogを表示され入力できるのですが、入力後再度EditTextをクリックするとソフトウェアキーボードが立ち上がってユーザが自由に入力できてしまう。
ソフトウェアキーボードが立ち上がらないようにするには、EditTextのフォーカスを禁止してあげればいいのだけれども、それだとonFocusChangeが呼ばれない・・・。
修正後
で結局は、EditTextがクリックされたときにDatePickerDialogを表示するようにしました。
・layout.xml
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="true"
android:inputType="date">
</EditText>
4行目でfocusable=”false”としてフォーカス不可にしているので、クリックしてソフトウェアキーボードが立ち上がりません。
・javaコード
mDateText = (EditText)findViewById(R.id.editText1);
mDateText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// DatePickerDialogの表示
}
});
たいした内容ではないので、以上です。





あざす!!