我是android开发的新手,目前正在尝试将材料设计集成到我的应用程序中。我想评估一个简单的表单,为此,我使用了组件com.google.android.material.textfield.TextInputLayout和com.google.android.material.textfield.TextInputEditText作为用户输入。除了文本输入,我需要一个日期,我想用一个MaterialDatePicker阅读。
我试图用MaterialDatePicker显示OnFocusChangeListener,但我有两个问题。
显示有点延迟,因为首先打开一个键盘,它在调用MaterialDatePicker.
MaterialDatePicker。这就是我实现OnFocusChangeListener的方式
@Override
public void onFocusChange(View view, boolean selected) {
if( view.getId() == R.id.myId&& selected ){
MaterialDatePicker.Builder builder = MaterialDatePicker.Builder.datePicker();
MaterialDatePicker picker = builder.build();
picker.show( this.getParentFragmentManager(), "DATE_PICKER" );
}
}材料设计中是否有更适合于演示的替代组件?我希望将行为保存在表单中,因此一旦用户输入日期,就应该在上面显示一个小标签,如下所示:

谢谢你的帮助。
发布于 2020-06-01 19:47:08
我最近也遇到了同样的问题。
关于键盘的第一个问题是通过调用:
mTextInputEditText.setInputType(InputType.TYPE_NULL);通过将InputType设置为TYPE_NULL,键盘将不会通过单击文本字段打开。此外,如果您不再希望用户能够输入任何文本,则可以添加:
mTextInputEditText.setKeyListener(null);第二个问题是,为了在DatePicker已经有焦点的情况下再次显示它,可以设置一个额外的onClickListener:
mTextInputEditText.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
openDatePicker();
}
});当用户再次单击文本字段时,将立即调用OnClickListener。遗憾的是,它不能在第一次点击时工作。您可以查看这个答案https://stackoverflow.com/a/11799891/9612595以获得更多信息。不幸的是,使文本字段不可聚焦就会产生奇怪的行为,并从材料中得到提示。
我希望这能帮上忙!
发布于 2021-08-26 05:25:32
添加到luk321答案。而不是OnClickListener,您可以使用OnTouchListener。对前-
editText.setOnTouchListener((view, motionEvent) -> {
if(motionEvent.getAction() == MotionEvent.ACTION_UP){
//your code
}
return false;
});它将在第一次接触时起作用。确保使用ACTION.UP,否则事件将在滚动时发生。
发布于 2021-11-02 19:24:24
deliverDatePicker.editText?.setOnClickListener {
viewModel.onDatePickerClick()
}
deliverDatePicker.editText?.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus) {
viewModel.onDatePickerClick()
}
}覆盖setOnFocusChangeListener和setOnClickListener解决了@luk321 321应答的第一个未注册单击事件
https://stackoverflow.com/questions/60710536
复制相似问题