TextInputEditText中的OnClickListener包裹在TextInputLayout中

时间:2016-11-18 06:00:01

标签: android android-layout android-edittext android-textinputlayout datepickerdialog

我有 TextInputEditText 围绕 TextInputLayout ,Google建议:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html

但是,我的TextInputEditText上设置了一个OnClickListener,因此当用户点击它时,可以弹出一个DatePickerDialog。
我的问题是,事实上,在第一次点击时除了提示标签移动到TextInputEditText之外没有任何反应。 第二次点击时,会显示DatePickerDialog。

如何在第一次点击时显示DatePickerDialog? 在TextInutLayout而不是TextInputEditText上设置onClickListener不起作用。 有人有想法吗?

3 个答案:

答案 0 :(得分:8)

仅在第二次点击时打开日历是因为您使用的是edittext。在第一次单击时,您的编辑文本将获得焦点。然后第二次单击只调用onClickListener。

如果您不期望手动编辑日期(使用键盘),那么为什么不使用TextView显示所选日期?。

首次点击时显示日历:

如果您需要使用EditText并在第一次点击时加载日历,请尝试将onFocusChangeListner设置为editText而不是onClickListner

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(hasFocus) {
           // Show your calender here 
        } else {
           // Hide your calender here
        }
    }
});

答案 1 :(得分:0)

将属性android:focusableInTouchMode设置为false,如下所示:

android:focusableInTouchMode="false"

在您的edittext xml代码中。 有关更多信息,请访问here

答案 2 :(得分:-1)

我用改进的解决方案回答了链接的问题,该解决方案不影响键盘导航,但仍然可以让您具有所需的对焦行为。

请参见https://stackoverflow.com/a/62875800/9901599,但关键是不要设置任何与焦点相关的XML属性,而要在代码中完成:

editText.setOnFocusChangeListener { view, isFocused ->
    if (view.isInTouchMode && isFocused) {
        view.performClick()  // picks up first tap
    }
}
editText.setOnClickListener {
    showDatePicker() // the actual thing you want to do
}