Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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材质设计内联日期选择器问题_Android_Datepicker_Android 5.0 Lollipop_Android Datepicker_Datepickerdialog - Fatal编程技术网

Android材质设计内联日期选择器问题

Android材质设计内联日期选择器问题,android,datepicker,android-5.0-lollipop,android-datepicker,datepickerdialog,Android,Datepicker,Android 5.0 Lollipop,Android Datepicker,Datepickerdialog,我有一个带有日期选择器的滚动视图 在以前版本的Android中,日期选择器是: 我可以毫无问题地滚动Datepicker日、月、年的单个元素 在Android棒棒糖API level 21材质中,Datepiker如下所示: 如果我点击月份显示日历视图,并且我无法更改月份,我只能选择日期。如果我试图编辑年份,会显示一个年份滚动条,但如果我尝试滚动它,则会滚动包含日期选择器的整个布局,而不仅仅是日期 calendarViewShown=false 似乎被忽视了 如何解决此问题?日历样式的日期

我有一个带有日期选择器的
滚动视图

在以前版本的Android中,日期选择器是:

我可以毫无问题地滚动Datepicker日、月、年的单个元素

在Android棒棒糖API level 21材质中,Datepiker如下所示:

如果我点击月份显示日历视图,并且我无法更改月份,我只能选择日期。如果我试图编辑年份,会显示一个年份滚动条,但如果我尝试滚动它,则会滚动包含日期选择器的整个布局,而不仅仅是日期

calendarViewShown=false
似乎被忽视了


如何解决此问题?

日历样式的日期选择器中不推荐使用
CalendarViewShowed
属性。如果要恢复微调器样式的日期选择器,可以将
datePickerMode
属性设置为
spinner

<DatePicker
    ...
    android:datePickerMode="spinner" />


至于滚动问题,日历样式的日期选择器不支持嵌套滚动。

步骤1:创建微调器/日历日期选择器布局

…/main/res/layout/spinner\u date\u picker\u layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false" />
    <?xml version="1.0" encoding="utf-8"?>
    <DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:datePickerMode="calendar" />
    <TextView
        android:id="@+id/dateText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:clickable="true"
        android:text="Date"
        android:onClick="@{() -> viewModel.onClickDate()}"></TextView>
步骤4:将日期选择器布局设置为对话框视图。

private fun showDialogForDate() {

    //Set spinner/calendar date picker layout
    val spinnerDatePicker = layoutInflater.inflate(R.layout.spinner_date_picker_layout, null)

    // On click listener for dialog buttons
    val dialogClickListener = DialogInterface.OnClickListener { _, which ->
        when (which) {
            DialogInterface.BUTTON_POSITIVE -> {
                activity!!.dateText.text = spinnerDatePicker.datePicker.dayOfMonth.toString() + "/" + (spinnerDatePicker.datePicker.month + 1) + "/" + spinnerDatePicker.datePicker.year
            }
            DialogInterface.BUTTON_NEGATIVE -> {

            }
        }
    }

    val builder = AlertDialog.Builder(context!!)
    builder.setTitle(resources.getString(R.string.dialog_title))
        .setView(spinnerDatePicker)
        .setPositiveButton("Ok", dialogClickListener)
        .setNegativeButton("Cancel", dialogClickListener)
        .create()
        .show()
}

非常感谢。你救了我!为什么在API中看不到该属性?->哎呀,感谢谷歌采用现有的工作代码,并在新版本的Android上彻底破解它!这甚至不是源代码兼容性,而是他们破坏的二进制兼容性。如果您使用的是Holo,默认情况下您仍将获得微调器日期选择器,API仍将按预期工作。如果您将应用程序更新为Material,这将是您需要更改以支持新样式的众多内容之一。@Mulgard没问题,只需添加
tools:ignore=“unusystantribute”
以使警告静音即可。在棒棒糖API之前的级别中,
android:datePickerMode
属性将被忽略。
private fun showDialogForDate() {

    //Set spinner/calendar date picker layout
    val spinnerDatePicker = layoutInflater.inflate(R.layout.spinner_date_picker_layout, null)

    // On click listener for dialog buttons
    val dialogClickListener = DialogInterface.OnClickListener { _, which ->
        when (which) {
            DialogInterface.BUTTON_POSITIVE -> {
                activity!!.dateText.text = spinnerDatePicker.datePicker.dayOfMonth.toString() + "/" + (spinnerDatePicker.datePicker.month + 1) + "/" + spinnerDatePicker.datePicker.year
            }
            DialogInterface.BUTTON_NEGATIVE -> {

            }
        }
    }

    val builder = AlertDialog.Builder(context!!)
    builder.setTitle(resources.getString(R.string.dialog_title))
        .setView(spinnerDatePicker)
        .setPositiveButton("Ok", dialogClickListener)
        .setNegativeButton("Cancel", dialogClickListener)
        .create()
        .show()
}