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






あざす!!