日付の入力


Pocket

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

 
 
たいした内容ではないので、以上です。

 

Leave a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>