TextInputLayout 内の EditText の onclick には 2 回のクリックが必要ですか? Android 質問する

TextInputLayout 内の EditText の onclick には 2 回のクリックが必要ですか? Android 質問する

私は単に TextInputLayout 内の Edit テキストを onlick listen させようとしています。 動作しますが、トリガーするには 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();
            }
        });
    }

ベストアンサー1

属性を設定するandroid:focusableInTouchMode間違い

android:focusableInTouchMode="false"

XML コード内edittext


ドキュメントからの説明android:focusableInTouchModeは:

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

そしてそれEditText真実デフォルトでは。

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

おすすめ記事