如何在Kotlin中为Datepicker Dialog设置自定义颜色?
修改Android DatePickerDialog颜色的实用方案
针对你遇到的问题,下面是两种适配新版Android的可行方法,操作简单易上手:
方法一:通过自定义主题修改(推荐,统一风格)
这种方式适合给应用内的DatePickerDialog统一设置样式,步骤如下:
- 打开
res/values/styles.xml(如果是新版Android Studio,可能是res/values/themes.xml),添加一个自定义主题:
<style name="CustomDatePickerTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert"> <!-- 标题栏背景色 --> <item name="colorPrimary">#2196F3</item> <!-- 确认/取消按钮文字颜色 --> <item name="colorAccent">#FF5722</item> <!-- 选中日期的文字颜色 --> <item name="android:textColorPrimary">#1976D2</item> <!-- 日历头部背景色 --> <item name="android:colorBackground">#F5F5F5</item> <!-- 未选中日期的文字颜色 --> <item name="android:textColorSecondary">#757575</item> </style>
- 创建DatePickerDialog的时候,把这个主题传进去:
btnDatePicker.setOnClickListener{ DatePickerDialog( this, R.style.CustomDatePickerTheme, // 这里替换成自定义主题 datePicker, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH) ).show() }
方法二:代码动态修改(灵活调整单个对话框)
如果只想改某一个DatePickerDialog的特定部分,可以用代码直接调整,注意适配不同Android版本:
btnDatePicker.setOnClickListener{ val datePickerDialog = DatePickerDialog( this, datePicker, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH) ) // 获取对话框里的DatePicker控件 val innerDatePicker = datePickerDialog.datePicker // 修改选中日期的背景色(适配Android 5.0+) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { innerDatePicker.findViewById<View>(android.R.id.day)?.backgroundTintList = ColorStateList.valueOf(Color.parseColor("#2196F3")) } // 修改确认和取消按钮的文字颜色 datePickerDialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setTextColor(Color.parseColor("#FF5722")) datePickerDialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setTextColor(Color.parseColor("#757575")) datePickerDialog.show() }
小提醒
- 如果你项目用了Material Components库,主题要继承
Theme.MaterialComponents相关的样式,不然有些属性可能不生效。 - 测试的时候多试几个Android版本,避免出现适配问题。
内容的提问来源于stack exchange,提问作者Azyoko
相关产品推荐
相关产品推荐

