Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android使用MaterialDatePicker和TextInputLayout_Android_Datepicker_Material Design - Fatal编程技术网

Android使用MaterialDatePicker和TextInputLayout

Android使用MaterialDatePicker和TextInputLayout,android,datepicker,material-design,Android,Datepicker,Material Design,我是android开发新手,目前正在尝试将材质设计集成到我的应用程序中。 我想评估一个简单的表单,为此,我使用组件com.google.android.material.textfield.TextInputLayout和com.google.android.material.textfield.textinputtext进行用户输入。除了文本输入,我还需要一个日期,我想用MaterialDatePicker读取它 我尝试使用onfocuschangeelistener显示MaterialDat

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

我尝试使用
onfocuschangeelistener
显示
MaterialDatePicker
,这也可以,但我有两个问题

  • 显示有点延迟,因为首先打开一个键盘,在调用
    MaterialDatePicker
    后,键盘立即关闭
  • 使用“后退”按钮关闭显示器时,焦点仍在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" );
        }
    }
    
    是否有更适合演示文稿的材料设计替代组件?我希望将该行为保留在表单中,因此一旦用户输入日期,就会在上面显示一个小标签,如下所示:


    谢谢你的帮助。

    我最近遇到了同样的问题

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

    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。遗憾的是,第一次点击它就不起作用了。 您可以查看此答案以了解更多信息。不幸的是,在Material的提示下,使文本字段不可聚焦会导致奇怪的行为

    我希望这有帮助