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()
    }
}
相关推荐
2501_916008899 小时前
苹果上架工具怎么选 不用 Mac 上架 App Store 的几种方案
android·macos·ios·小程序·uni-app·iphone·webview
jijihusong00611 小时前
KMP全栈开发教程:从Android到AI Agent
android·人工智能
_祝你今天愉快12 小时前
Android Binder 驱动 - 内核驱动层源码初探
android
stevenzqzq12 小时前
【无标题】
android
梦幻通灵13 小时前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
1024+14 小时前
YOLO 转 RKNN 识别率降低调优操作手册(新手篇)
android·yolo·kotlin
木易 士心15 小时前
深度解析 Android 音频焦点处理与实战开发
android·音视频
祉猷并茂,雯华若锦16 小时前
Appium 3.x安卓APP企业级安装实战
android·appium
微露清风17 小时前
浅析 MySQL 索引
android·数据库·mysql
91刘仁德17 小时前
MySQL 数据类型详解
android·笔记·mysql·adb