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()
    }
}
相关推荐
Gary Studio6 小时前
安卓HAL编写
android
_李小白9 小时前
【android opencv学习笔记】Day 2: Mat类(图片数据结构体)
android·opencv·学习
jinanwuhuaguo11 小时前
OpenClaw工程解剖——RAG、向量织构与“记忆宫殿”的索引拓扑学(第十三篇)
android·开发语言·人工智能·kotlin·拓扑学·openclaw
小怪吴吴12 小时前
idea 开发Android
android·java·intellij-idea
xiaoyan201514 小时前
2026爆肝!Flutter3.41纯手撸微信聊天APP原生应用
android·flutter·dart
jinanwuhuaguo15 小时前
OpenClaw协议霸权——从 MCP 标准到意图封建化的政治经济学(第十八篇)
android·人工智能·kotlin·拓扑学·openclaw
撩得Android一次心动15 小时前
Android Room 数据库详解【源码篇】
android·数据库·android jetpack·room
TO_ZRG16 小时前
Android WorkManager 完全入门指南
android
a8a30216 小时前
Laravel 6.x新特性全解析
android
用户游民17 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java