Android中自定义日期选择器样式DatePickerDialog

方式一:

res文件下value文件下style.xml

XML 复制代码
<style name="CustomDatePickerTheme" parent="Theme.MaterialComponents.Light.Dialog">
        <!-- 1. 标题栏背景色 -->
        <item name="colorPrimary">你的颜色</item>
        <!-- 2. 标题文字颜色 -->
        <item name="colorOnPrimary">你的颜色</item>
        <!-- 3. 按钮文字颜色(确定/取消) -->
        <item name="colorAccent">你的颜色</item>
        <!-- 4. 选中日期的颜色 -->
        <item name="android:colorControlActivated">你的颜色</item>
        <!-- 5. 对话框背景色 -->
        <item name="android:windowBackground">你的颜色</item>
    </style>
Kotlin 复制代码
//年月日选择器:R.style.CustomDatePickerTheme指定的样式
class MyDatePickerDialog(context: Context,
                         listener: OnDateSetListener?,
                         year: Int,
                         monthOfYear: Int,
                         dayOfMonth: Int
) : DatePickerDialog(context, R.style.CustomDatePickerTheme, listener, year, monthOfYear, dayOfMonth) {
    override fun onStart() {
        super.onStart()
		//确定按钮
        getButton(BUTTON_POSITIVE)?.setTextColor(ContextCompat.getColor(context, R.color.login_title))
		//取消按钮
        getButton(BUTTON_NEGATIVE)?.setTextColor(ContextCompat.getColor(context, R.color.login_title))
    }
}
Kotlin 复制代码
//时分秒选择器
class MyTimePickerDialog(context: Context?,
                         listener: OnTimeSetListener?,
                         hourOfDay: Int,
                         minute: Int,
                         is24HourView: Boolean
): TimePickerDialog(context, R.style.CustomDatePickerTheme, listener,hourOfDay,minute,is24HourView) {
    override fun onStart() {
        super.onStart()
        getButton(BUTTON_POSITIVE)?.setTextColor(ContextCompat.getColor(context, R.color.login_title))
        getButton(BUTTON_NEGATIVE)?.setTextColor(ContextCompat.getColor(context, R.color.login_title))
    }
}

使用:

Kotlin 复制代码
public class Test{

    private var calendar = Calendar.getInstance()
	private fun showDateTimePicker(editText: EditText) {
        // 显示日期选择器
        val datePickerDialog = MyDatePickerDialog(
            requireContext(),
            { _, year, monthOfYear, dayOfMonth ->
                calendar.set(Calendar.YEAR, year)
                calendar.set(Calendar.MONTH, monthOfYear)
                calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)

                // 显示时间选择器
                showTimePicker(editText)
            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        datePickerDialog.show()
    }
	private fun showTimePicker(editText: EditText) {
        // 显示时间选择器
        val timePickerDialog = MyTimePickerDialog(
            requireContext(),
            { _, hourOfDay, minute ->
                calendar.set(Calendar.HOUR_OF_DAY, hourOfDay)
                calendar.set(Calendar.MINUTE, minute)

                // 如果需要选择秒数,可以手动添加一个输入框或其他方式让用户输入秒数
                // 这里我们假设用户不需要选择秒数或默认为00
                calendar.set(Calendar.SECOND, 0)

                updateDateTimeText(editText)
            },
            calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE),
            true
        ) // 使用24小时制
        timePickerDialog.show()
    }
	private fun updateDateTimeText(editText: EditText) {
        // 更新TextView以显示所选的完整日期和时间
        val month = calendar.get(Calendar.MONTH) + 1
        val formattedMonth = String.format("%02d", month)
        val day = calendar.get(Calendar.DAY_OF_MONTH)
        val formattedDay = String.format("%02d", day)
        val selectedDateTime =
            "${calendar.get(Calendar.YEAR)}-$formattedMonth-$formattedDay " +
                    "${calendar.get(Calendar.HOUR_OF_DAY)}:${calendar.get(Calendar.MINUTE)}:00"//${calendar.get(Calendar.SECOND)}
        editText.setText(selectedDateTime)
    }
}

方式二:

res文件下value文件下style.xml

XML 复制代码
<!-- 自定义 DatePickerDialog 主题 -->
    <style name="CustomDatePickerDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
        <item name="colorAccent">你的颜色</item> 
        <item name="colorControlActivated">你的颜色</item>
		<!-- 确定/取消按钮颜色 -->
        <item name="buttonBarPositiveButtonStyle">@style/DatePickerButtonStyle</item>
        <item name="buttonBarNegativeButtonStyle">@style/DatePickerButtonStyle</item>
        <item name="buttonBarNeutralButtonStyle">@style/DatePickerButtonStyle</item>
    </style>
    <style name="DatePickerButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
        <item name="android:textColor">你的颜色</item>
        <!-- 可选:修改按钮背景、字体等 -->
        <!-- <item name="android:background">...</item> -->
    </style>

使用:

Kotlin 复制代码
public class Test{
	private fun showDateTimePicker(editText: EditText) {
        // 显示日期选择器
        val datePickerDialog = DatePickerDialog(
            requireContext(),R.style.CustomDatePickerDialogTheme,
            { _, year, monthOfYear, dayOfMonth ->
                calendar.set(Calendar.YEAR, year)
                calendar.set(Calendar.MONTH, monthOfYear)
                calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)

                // 显示时间选择器
                showTimePicker(editText)
            },
            calendar.get(Calendar.YEAR),
            calendar.get(Calendar.MONTH),
            calendar.get(Calendar.DAY_OF_MONTH)
        )
        datePickerDialog.show()
    }
}
相关推荐
建群新人小猿3 小时前
陀螺匠企业助手—个人简历
android·大数据·开发语言·前端·数据库
Mr Lee_5 小时前
attribute android:enableOnBackInvokedCallback not found
android
Jomurphys5 小时前
Compose - 使用 Reorderable
android
帅得不敢出门5 小时前
Android Framework在mk中新增类似PRODUCT_MODEL的变量并传递给buildinfo.sh及prop属性中
android·linux·前端
似霰6 小时前
AIDL Hal 开发笔记7----AIDL HAL 的升级
android·framework·hal
黄大包6 小时前
android MQTT封装
android·mqtt·mt
2501_916007479 小时前
跨平台 App 安全,Flutter、RN、Unity、H5 混合应用加固
android·ios·小程序·https·uni-app·iphone·webview
hinewcc10 小时前
Linux电源管理 - wakelocks
android·linux
你怎么知道我是队长10 小时前
win11系统查看设备配置
android·java·javascript