Android 使用 MaterialDatePicker 和 TextInputLayout

Ste*_*ann 5 android datepicker material-design

我是 Android 开发新手,目前正在尝试将材料设计集成到我的应用程序中。我想评估一个简单的表单,为此我使用了组件com.google.android.material.textfield.TextInputLayoutcom.google.android.material.textfield.TextInputEditText用户输入。除了文本输入之外,我还需要一个日期,我想用MaterialDatePicker.

我尝试显示MaterialDatePickerwith OnFocusChangeListener,这也有效,但我有两个问题。

  1. 显示有点延迟,因为首先打开一个键盘,在调用MaterialDatePicker.
  2. 当使用“后退”按钮关闭显示时,焦点仍位于 TextInputLayout 上。所以我必须先改变焦点才能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" );
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有更适合演示的 Material Design 替代组件?我想将行为保留在表单内,因此一旦用户输入日期,上面就应该显示一个小标签,如下所示:

在此输入图像描述

感谢您的帮助。

luk*_*321 6

我最近遇到了同样的问题。

关于键盘的第一个问题可以通过调用来解决:

mTextInputEditText.setInputType(InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)

通过将 InputType 设置为 TYPE_NULL,键盘将不会通过单击文本字段来打开。此外,如果您不再希望用户能够输入任何文本,您可以添加:

mTextInputEditText.setKeyListener(null);
Run Code Online (Sandbox Code Playgroud)

第二个问题,要在已获得焦点的情况下再次显示 DatePicker,您可以设置一个额外的 onClickListener:

mTextInputEditText.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                openDatePicker();
            }
        });
Run Code Online (Sandbox Code Playgroud)

当用户再次单击文本字段时,就会调用 OnClickListener。遗憾的是,第一次点击时它将不起作用。您可以查看此答案/sf/answers/825992401/以获取更多信息。不幸的是,根据 Material 的提示,使文本字段无法聚焦会导致奇怪的行为。

我希望这有帮助!