41

我有ScrollView一个日期选择器

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

在此处输入图像描述

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

在 Android Lollipop API level 21 Material 中,Datepiker 是这样显示的:

在此处输入图像描述在此处输入图像描述

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

calendarViewShown=false

似乎被忽略了

我该如何解决这个问题???

4

2 回答 2

65

calendarViewShown属性在日历样式的日期选择器中已弃用。如果您想恢复微调器样式的日期选择器,您可以将datePickerMode属性设置为spinner.

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

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

于 2014-11-11T00:25:54.513 回答
1

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

.../main/res/layout/spinner_date_picker_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" />

.../main/res/layout/calendar_date_picker_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="calendar" />

步骤 2:在 TextView 上设置可点击行为以显示日期对话框。

.../main/res/layout/activity_layout.xml

    <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>

第 3 步:在 onClickDate 上显示对话框

override fun onClickDate() {
        showDialogForDate()
}

步骤 4:将 DatePicker 布局设置为对话框视图。

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()
}
于 2020-01-19T19:59:09.477 回答