TextInputEditText 中的 OnClickListener 包裹在 TextInputLayout 中
OnClickListener in TextInputEditText wrapped around TextInputLayout
我有一个 TextInputEditText 环绕着一个 TextInputLayout,正如 Google 建议的那样:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html
但是,我的 TextInputEditText 上设置了 OnClickListener,因此当用户点击它时,会弹出 DatePickerDialog。
我的问题是,事实上,在第一次点击时,除了提示标签移动到 TextInputEditText 上方之外,什么也没有发生。
第二次点击时,将显示 DatePickerDialog。
如何让 DatePickerDialog 在第一次点击时显示?
在 TextInutLayout 而不是 TextInputEditText 上设置 onClickListener 不起作用。
有人有想法吗?
日历只在第二次点击时打开是因为您使用的是 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
}
}
});
将属性 android:focusableInTouchMode 设置为 false,如下所示:
android:focusableInTouchMode="false"
在您的 edittext xml 代码中。
如需更多信息,请访问
我用一个改进的解决方案回答了链接的问题,该解决方案不影响键盘导航,但仍然允许您获得所需的焦点行为。
参见,但关键是不要设置任何与焦点相关的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
}
我有一个 TextInputEditText 环绕着一个 TextInputLayout,正如 Google 建议的那样:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html
但是,我的 TextInputEditText 上设置了 OnClickListener,因此当用户点击它时,会弹出 DatePickerDialog。
我的问题是,事实上,在第一次点击时,除了提示标签移动到 TextInputEditText 上方之外,什么也没有发生。
第二次点击时,将显示 DatePickerDialog。
如何让 DatePickerDialog 在第一次点击时显示?
在 TextInutLayout 而不是 TextInputEditText 上设置 onClickListener 不起作用。
有人有想法吗?
日历只在第二次点击时打开是因为您使用的是 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
}
}
});
将属性 android:focusableInTouchMode 设置为 false,如下所示:
android:focusableInTouchMode="false"
在您的 edittext 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
}