我有 TextInputEditText 围绕 TextInputLayout ,Google建议:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html
但是,我的TextInputEditText上设置了一个OnClickListener,因此当用户点击它时,可以弹出一个DatePickerDialog。
我的问题是,事实上,在第一次点击时除了提示标签移动到TextInputEditText之外没有任何反应。
第二次点击时,会显示DatePickerDialog。
如何在第一次点击时显示DatePickerDialog? 在TextInutLayout而不是TextInputEditText上设置onClickListener不起作用。 有人有想法吗?
答案 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
}