Android 使用 MaterialDatePicker 和 TextInputLayout

标签 android datepicker material-design

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

我试图显示 MaterialDatePickerOnFocusChangeListener ,这也有效,但我有两个问题。

  • 显示有点延迟,因为首先打开了一个键盘,该键盘在调用 MaterialDatePicker 后立即关闭.
  • 当使用 Back 按钮关闭显示时,焦点仍在 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" );
        }
    }
    

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

    enter image description here

    谢谢您的帮助。

    最佳答案

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

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

    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了解更多信息。不幸的是,使用 Material 的提示使文本字段无法聚焦会导致奇怪的行为。

    我希望这会有所帮助!

    关于Android 使用 MaterialDatePicker 和 TextInputLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60710536/

    相关文章:

    android - 动态更改 Activity 背景

    java - 从 Servlet 检索多个数组

    java - 尽管这是一个 kotlin 类,为什么我们要编写 NextActivity::class.java ?

    xaml - DatePicker 弹出演示者样式

    mongodb - Angular 5 + Material 设计 : <mat-select> how to set the default value?

    html - 网页 Material 设计 - 如何进行自动完成输入

    android - singleCursorHandlerTouchEvent -getEditableSupport FASLE 错误

    jquery - 无法添加日期选择器选项?

    android - 日期选择器:单击按钮时如何弹出日期选择器并将值存储在变量中

    material-design - float 操作按钮 (FAB) 和凸起按钮之间的区别