如何使用 MaterialComponents 正确显示 DatePickerDialog?
How to properly display DatePickerDialog using MaterialComponents?
我正在为 material.io 的 Android 使用 MaterialComponents。
我有两个主题(浅色和深色)。我想显示一个 DatePickerDialog。
但这是结果:
这是我如何显示对话框的代码:
private fun selectDeadline() {
val dialog = DateDialog()
val bundle = Bundle()
bundle.putInt("themeId", themeId)
dialog.arguments = bundle
dialog.show(supportFragmentManager, "")
}
class DateDialog : DialogFragment(), DatePickerDialog.OnDateSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val date = DateTime.now()
val themeId = arguments!!.getInt("themeId")
return DatePickerDialog(activity!!, themeId, this, date.year, date.monthOfYear - 1, date.dayOfMonth)
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, day: Int) {
deadlineTitle.text = "$year, $month, $day"
}
}
最后但同样重要的是,我的主题:
<resources>
<!-- Dark application theme. -->
<style name="AppTheme.Dark" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="toolbarBackground">@color/darkBackground</item>
<item name="toolbarStyle">@style/AppTheme.Dark.Toolbar</item>
<item name="iconColor">#fff</item>
<item name="dividerBackground">@android:drawable/divider_horizontal_dark</item>
<item name="android:statusBarColor">@android:color/black</item>
</style>
<style name="AppTheme.Dark.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@color/darkBackground</item>
<item name="android:elevation">8dp</item>
</style>
<!-- Light application theme. -->
<style name="AppTheme.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="toolbarBackground">@color/lightBackground</item>
<item name="toolbarStyle">@style/AppTheme.Light.Toolbar</item>
<item name="iconColor">#000</item>
<item name="dividerBackground">@android:drawable/divider_horizontal_bright</item>
<item name="android:datePickerDialogTheme">@style/AppTheme.Light.DatePicker</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
</style>
<style name="AppTheme.Light.DatePicker" parent="ThemeOverlay.MaterialComponents.Dialog">
<item name="materialButtonStyle">?android:attr/borderlessButtonStyle</item>
</style>
<style name="AppTheme.Light.Toolbar" parent="Widget.MaterialComponents.Toolbar">
<item name="android:background">@color/colorPrimary</item>
<item name="android:elevation">8dp</item>
</style>
如果我不给 themeId 作为参数,它会在浅色主题上正确显示,但在深色主题上它只会显示带有白色文本的浅色版本,由于白色背景,用户看不到。
解决这个问题的正确方法是什么?
感谢您的提问。 Material 组件库目前不支持日期和时间选择器的暗模式。我们计划增加对此的支持,敬请期待。
我正在为 material.io 的 Android 使用 MaterialComponents。
我有两个主题(浅色和深色)。我想显示一个 DatePickerDialog。
但这是结果:
这是我如何显示对话框的代码:
private fun selectDeadline() {
val dialog = DateDialog()
val bundle = Bundle()
bundle.putInt("themeId", themeId)
dialog.arguments = bundle
dialog.show(supportFragmentManager, "")
}
class DateDialog : DialogFragment(), DatePickerDialog.OnDateSetListener {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val date = DateTime.now()
val themeId = arguments!!.getInt("themeId")
return DatePickerDialog(activity!!, themeId, this, date.year, date.monthOfYear - 1, date.dayOfMonth)
}
override fun onDateSet(view: DatePicker?, year: Int, month: Int, day: Int) {
deadlineTitle.text = "$year, $month, $day"
}
}
最后但同样重要的是,我的主题:
<resources>
<!-- Dark application theme. -->
<style name="AppTheme.Dark" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="toolbarBackground">@color/darkBackground</item>
<item name="toolbarStyle">@style/AppTheme.Dark.Toolbar</item>
<item name="iconColor">#fff</item>
<item name="dividerBackground">@android:drawable/divider_horizontal_dark</item>
<item name="android:statusBarColor">@android:color/black</item>
</style>
<style name="AppTheme.Dark.Toolbar" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@color/darkBackground</item>
<item name="android:elevation">8dp</item>
</style>
<!-- Light application theme. -->
<style name="AppTheme.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="toolbarBackground">@color/lightBackground</item>
<item name="toolbarStyle">@style/AppTheme.Light.Toolbar</item>
<item name="iconColor">#000</item>
<item name="dividerBackground">@android:drawable/divider_horizontal_bright</item>
<item name="android:datePickerDialogTheme">@style/AppTheme.Light.DatePicker</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
</style>
<style name="AppTheme.Light.DatePicker" parent="ThemeOverlay.MaterialComponents.Dialog">
<item name="materialButtonStyle">?android:attr/borderlessButtonStyle</item>
</style>
<style name="AppTheme.Light.Toolbar" parent="Widget.MaterialComponents.Toolbar">
<item name="android:background">@color/colorPrimary</item>
<item name="android:elevation">8dp</item>
</style>
如果我不给 themeId 作为参数,它会在浅色主题上正确显示,但在深色主题上它只会显示带有白色文本的浅色版本,由于白色背景,用户看不到。
解决这个问题的正确方法是什么?
感谢您的提问。 Material 组件库目前不支持日期和时间选择器的暗模式。我们计划增加对此的支持,敬请期待。