ユーザに日付を入力してもらうときは、テキスト入力じゃなくて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の表示 } });
たいした内容ではないので、以上です。
あざす!!