如何在 API 28 中设置 android 日期和时间选择器的样式

Posted

技术标签:

【中文标题】如何在 API 28 中设置 android 日期和时间选择器的样式【英文标题】:How to style android Date- and TimePicker in API 28 【发布时间】:2019-08-24 03:43:16 【问题描述】:

我已经在 android 中构建了一个应用程序来使用 Date-and TimePicker Widget 选择日期和时间。一开始我使用 API 级别 19 部署/编译应用程序。在将 API 级别设置为 28 后,小部件的整体样式发生了变化。 所以我现在必须手动设置小部件的样式,但不知道从哪里开始。以下图片显示了我需要做的事情。

图 1: (来源:000webhostapp.com)

图二: (来源:000webhostapp.com)

将图 1 中 DatePicker 的 android:width 设置为 match_parent 后,小部件不会填充显示并在右侧留下一个不希望的空白区域。 此外,我想让小部件顶部的数字变为白色,绿色条应该是透明的。

非常感谢您的每一次帮助,从哪里开始或必须设置哪些属性才能实现目标。

【问题讨论】:

【参考方案1】:

你应该在styles.xml中自定义样式:

   <style name="YourDialog" parent="@style/Theme.AppCompat.DayNight.Dialog">
       <item name="android:colorAccent">@color/ts_blue</item>
       <item name="android:buttonTint">@color/ts_blue</item>
       <item name="colorControlActivated">@color/ts_blue</item>
       <item name="colorControlHighlight">@color/menu_separator_gray</item>
       <item name="android:windowBackground">@color/ts_white</item>
       <item name="android:buttonBarNegativeButtonStyle">@style/DialogButtonStyle</item>
       <item name="android:buttonBarPositiveButtonStyle">@style/DialogButtonStyle</item>
       <item name="android:buttonBarNeutralButtonStyle">@style/DialogButtonStyle</item>
   </style>

然后像这样申请:

 val datePickerDialog = DatePickerDialog(context, R.style.YourDialog,
                DatePickerDialog.OnDateSetListener  _, year, month, dayOfMonth ->
                    calendar.set(Calendar.YEAR, year)
                    calendar.set(Calendar.MONTH, month)
                    calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
                    val formattedDate = DefaultDateFormatter().formatDate(
                            date = Date(calendar.timeInMillis),
                            dateFormat = datePickerReturnDateFormat)

                    filter.id = formattedDate

                    onFilterSelectionDone()
                ,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH)
        )

【讨论】:

以上是关于如何在 API 28 中设置 android 日期和时间选择器的样式的主要内容,如果未能解决你的问题,请参考以下文章

我如何在android中设置自定义日期

如何在 Android DatePicker 中设置最小和最大日期?

如何在 android 的 datepicker 对话框中设置最大日期?

如何在android中设置移动系统时间和日期?

如何使用 AlarmClock 在 android 中设置闹钟的日期

猫鼬如何在模型中设置日期格式