Android Material Design Inline Datepicker问题
Posted
技术标签:
【中文标题】Android Material Design Inline Datepicker问题【英文标题】:Android Material Design Inline Datepicker issue 【发布时间】:2015-01-07 09:41:34 【问题描述】:我有一个带有日期选择器的ScrollView
在以前的 android 版本中,日期选择器是这样的:
我可以毫无问题地滚动 Datepicker 日、月、年的单个元素
在 Android Lollipop API level 21 Material 中,Datepiker 是这样显示的:
如果我点击月份显示日历视图并且我无法更改月份,我只能选择日期。如果我尝试编辑年份,则会显示一个年份滚动条,但如果我尝试滚动它,则包含 datepicker 的整个布局都会滚动,而不仅仅是日期。
calendarViewShown=false
似乎被忽略了
我该如何解决这个问题???
【问题讨论】:
【参考方案1】:calendarViewShown
属性在日历样式的日期选择器中已弃用。如果您想恢复微调器样式的日期选择器,可以将datePickerMode
属性设置为spinner
。
<DatePicker
...
android:datePickerMode="spinner" />
关于滚动问题,日历样式的日期选择器不支持嵌套滚动。
【讨论】:
谢谢!你救了我! 为什么我在 API 中看不到该属性? -> developer.android.com/reference/android/widget/DatePicker.html 哎呀,感谢 Google 采用现有的工作代码并在新版本的 Android 上完全破坏它!这甚至不是源代码兼容性,而是他们破坏的二进制兼容性。 如果您使用的是 Holo,默认情况下您仍将获得微调器日期选择器,并且 API 仍将按预期工作。如果您将应用更新为 Material,这将是您需要更改以支持新样式的众多内容之一。 @Mulgard 没问题,只需添加tools:ignore="UnusedAttribute"
即可使警告静音。 android:datePickerMode
属性将在 Lollipop 之前的 API 级别中被忽略。【参考方案2】:
第 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_
android:layout_
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_
android:layout_
android:datePickerMode="calendar" />
第 2 步:在 TextView 上设置可点击行为以显示日期对话框。
.../main/res/layout/activity_layout.xml
<TextView
android:id="@+id/dateText"
android:layout_
android:layout_
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()
【讨论】:
以上是关于Android Material Design Inline Datepicker问题的主要内容,如果未能解决你的问题,请参考以下文章
Android Material Design UI 和没有 Material Design 的 Android UI 有啥区别?
xml Android Material Design Colors
xml Android Material Design Colors