web-dev-qa-db-ja.com

TextInputLayout onclick内のEditTextには2クリックが必要ですか?! Android

TextInputLayout内の編集テキストでonlickをリッスンさせようとしています。それは動作しますが、それをトリガーするためにEditTextを2回クリックする必要があります。理由はわかりません。ここに私のコードがあります:

xml:

  <Android.support.design.widget.TextInputLayout
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10dp">

        <EditText
            Android:id="@+id/start_date"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:ems="10"
            Android:hint="Starting Date*: "
            Android:inputType="textPersonName" />
    </Android.support.design.widget.TextInputLayout>

聞き手:

   private void setListenners() {
        EditText startDate = (EditText) mView.findViewById(R.id.start_date);
        startDate.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onClick(View v) {
                Calendar mcurrentDate=Calendar.getInstance();
                int mYear = mcurrentDate.get(Calendar.YEAR);
                int mMonth = mcurrentDate.get(Calendar.MONTH);
                int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog mDatePicker=new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                        Log.d("DEBUG", "year: " + year + " month: " + month + " day: " + day);
                    }
                },mYear, mMonth, mDay);
                mDatePicker.show();
            }
        });
    }
19
Rémi

属性を設定しますAndroid:focusableInTouchModetofalse

Android:focusableInTouchMode="false"

edittext xmlコードで。


説明、ドキュメントから Android:focusableInTouchMode は:

ビューがタッチモードのときにフォーカスを取得できるかどうかを制御するブール値。これがビューに当てはまる場合、そのビューはクリックされたときにフォーカスを取得し、この属性がtrueに設定されていない別のビューがクリックされてもフォーカスを保持できます。

EditTextはデフォルトでtrueです。

つまり、最初のクリックでedittextがフォーカスを獲得し、2回目のクリックでClickListenerがトリガーされます。したがって、タッチに焦点を合わせるのを無効にする必要があります。

34
Atef Hares