如何更改Android 5.0的日期选择器对话框颜色

如何更改Android 5.0的日期选择器对话框颜色,android,dialog,styles,background-color,Android,Dialog,Styles,Background Color,是否可以更改android 5.0的日期选择器(以及时间选择器)颜色方案 我尝试过设置重音颜色,但这不起作用(无论是否使用android:): @颜色/紫色 @颜色/紫色 @颜色/紫色 原文: 对这样的事情: 试试这个 代码 您的Style.xml文件中的样式 编辑-根据建议将主题更改为theme.AppCompat.Light.Dialog <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">

是否可以更改android 5.0的日期选择器(以及时间选择器)颜色方案

我尝试过设置重音颜色,但这不起作用(无论是否使用
android:
):


@颜色/紫色
@颜色/紫色
@颜色/紫色
原文:

对这样的事情: 试试这个

代码

您的Style.xml文件中的样式

编辑-根据建议将主题更改为theme.AppCompat.Light.Dialog

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>

@颜色/蓝色500

尼尔的建议导致全屏
日期选择器的原因是选择了父主题:

<!-- Theme.AppCompat.Light is not a dialog theme -->
<style name="DialogTheme" parent="**Theme.AppCompat.Light**">
    <item name="colorAccent">@color/blue_500</item>
</style>
在我看来,这是不好的。人们应该尽量避免使用java和styles.xml/themes.xml中的样式

我同意Neil的建议,稍加修改(将父主题改为,
theme.Material.Light.Dialog
)将得到您想要的结果。但是,另一种方式是:

第一次检查时,我们遇到了
datePickerStyle
,它定义了如下内容:
headerBackground
(您试图更改的内容)、
dayOfWeekBackground
,以及一些其他文本颜色和文本样式

在应用程序的主题中覆盖此属性将不起作用
DatePickerDialog
使用可由属性
datePickerDialogTheme
分配的单独主题。因此,为了使我们的更改生效,我们必须在被覆盖的
datePickerDialogTheme
中覆盖
datePickerStyle

我们开始:

在应用程序的基本主题中覆盖
datePickerDialogTheme

<style name="AppBaseTheme" parent="android:Theme.Material.Light">
    ....
    <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
我们已经用样式
MyDatePickerStyle
覆盖了
datePickerStyle
。家长的选择将再次取决于应用程序的基本主题:Widget.Material.DatePicker
或Widget.Material.Light.DatePicker。根据您的要求进行定义:

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/chosen_header_bg_color</item>
</style>
如果您不需要这么多的控制(自定义),则不需要重写
datePickerStyle
colorAccent
控制大部分
DatePicker的
颜色。因此,仅在
MyDatePickerDialogTheme
内部覆盖
colorAccent
应该可以工作:

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
    <item name="android:colorAccent">@color/date_picker_accent</item>

    <!-- No need to override 'datePickerStyle' -->
    <!-- <item name="android:datePickerStyle">@style/MyDatePickerStyle</item> -->
</style>

只需提及,您还可以使用默认的主题,如android.R.style.theme\u DeviceDefault\u Light\u对话框

new DatePickerDialog(MainActivity.this, android.R.style.Theme_DeviceDefault_Light_Dialog, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    //DO SOMETHING
    }
}, 2015, 02, 26).show();

您没有创建主题,只需将其写入对话框创建对象中即可

DatePickerDialog datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT,this, mYear, mMonth, mDay);
按照此操作,它将为您提供所有类型的日期选择器样式 这真的很有效

试试这个,为我工作

放置两个选项,
colorAccent
android:colorAccent

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
   ....
    <item name="android:dialogTheme">@style/AppTheme.DialogTheme</item>
    <item name="android:datePickerDialogTheme">@style/Dialog.Theme</item>
</style>

<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">

<!-- Put the two options, colorAccent and android:colorAccent. -->
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
 </style>

....
@style/AppTheme.DialogTheme
@style/Dialog.Theme
@颜色/原色
@颜色/原色
@颜色/原色暗
@颜色/原色

我遇到了一个问题,android中API 24的屏幕上没有显示时间选择器按钮。(API 21+) 这是由

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
            <item name="android:colorAccent">@color/colorPrimary2</item></style>

<style name="Theme" parent="BBaseTheme">
         <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

@颜色/原色2
@样式/MyDatePickerDialogTheme

@颜色/选择2
@颜色/选择2
@样式/MyDatePickerStyle
@颜色/选择2

用于更改年度列表项目文本颜色(特定于ANDROID 5.0)

只需在日期选择器对话框样式中设置某些文本颜色。由于某些原因,设置标志
yearListItemTextAppearance
不会反映年度列表上的任何更改

<item name="android:textColor">@android:color/black</item>
@android:color/black
创建新样式

<!-- Theme.AppCompat.Light.Dialog -->
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>
结果:


科特林,2021年

// set date as button text if pressed
btnDate.setOnClickListener(View.OnClickListener {

    val dpd = DatePickerDialog(
        this,
        { view, year, monthOfYear, dayOfMonth ->
            val selectDate = Calendar.getInstance()
            selectDate.set(Calendar.YEAR, year)
            selectDate.set(Calendar.MONTH, monthOfYear)
            selectDate.set(Calendar.DAY_OF_MONTH, dayOfMonth)

            var formatDate = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
            val date = formatDate.format(selectDate.time)
            Toast.makeText(this, date, Toast.LENGTH_SHORT).show()
            btnDate.text = date
        }, 1990, 6, 6
    )

    val calendar = Calendar.getInstance()
    val year = calendar[Calendar.YEAR]
    val month = calendar[Calendar.MONTH]
    val day = calendar[Calendar.DAY_OF_MONTH]
    dpd.datePicker.minDate = GregorianCalendar(year - 90, month, day, 0, 0).timeInMillis
    dpd.datePicker.maxDate = GregorianCalendar(year - 10, month, day, 0, 0).timeInMillis
    dpd.show()
})
Styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- This is main Theme Style for your application! -->
    <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Dialog">
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.DatePicker">
    <item name="android:headerBackground">#A500FF</item>
</style>

@样式/MyDatePickerDialogTheme
@样式/MyDatePickerStyle
#A500FF

是的,它是紫色的,但也是全屏的:)但如果我把它放在一个片段中,它可能会被包含。在我再次开始玩它之前,有什么建议吗?我会看看是否能找到一个更合适的解决方案,不会让它全屏显示。只需使用
parent=“Theme.AppCompat.Light.Dialog”
而不是
parent=“Theme.AppCompat.Light”
@Neil谢谢你的回答,为我指出了正确的方向,这是最快的解决方案,但我正在寻找一种全风格/主题的方法:)不适用于android 6,它是全屏的,颜色不变。在应用程序主题中,您的颜色重音设置为什么颜色styles@Neil我已经添加了到目前为止我尝试用于样式设计的代码。感谢您对它的工作原理以及如何在styles@Vikram找不到calendarSelectedTextColor。是否可以向后是否兼容android<21日期选择器?@RoCk不确定你的意思,但我构建了一个库,将日期和时间选择器从android版本23向后移植到版本14。该项目位于:。非常好的答案!我只是想补充一点,我发现,
android:colorAccent
显然没有覆盖选择圈的颜色,但是纯
colorAccent
将覆盖选择颜色和“确定”/“取消”按钮文本。(或者您可以同时使用这两种颜色!)这是AndroidX Material 1.1.0库的一部分,可能会随DatePicker的不同版本而有所不同!AlertDialog.THEME\u HOLO\u灯光已弃用。。不工作此答案不需要v24 API及以上版本
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
   ....
    <item name="android:dialogTheme">@style/AppTheme.DialogTheme</item>
    <item name="android:datePickerDialogTheme">@style/Dialog.Theme</item>
</style>

<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog">

<!-- Put the two options, colorAccent and android:colorAccent. -->
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorPrimary">@color/colorPrimary</item>
    <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
 </style>
<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
            <item name="android:colorAccent">@color/colorPrimary2</item></style>

<style name="Theme" parent="BBaseTheme">
         <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>
<style name="AppThemeDatePicker" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorAccent">@color/select2</item>
    <item name="android:colorAccent">@color/select2</item>
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>


<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
    <item name="android:headerBackground">@color/select2</item>
</style>
<item name="android:textColor">@android:color/black</item>
<!-- Theme.AppCompat.Light.Dialog -->
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/blue_500</item>
</style>
DatePickerDialog = new DatePickerDialog(context,R.style.DialogTheme,this,now.get(Calendar.YEAR),now.get(Calendar.MONTH),now.get(Calendar.DAY_OF_MONTH);
// set date as button text if pressed
btnDate.setOnClickListener(View.OnClickListener {

    val dpd = DatePickerDialog(
        this,
        { view, year, monthOfYear, dayOfMonth ->
            val selectDate = Calendar.getInstance()
            selectDate.set(Calendar.YEAR, year)
            selectDate.set(Calendar.MONTH, monthOfYear)
            selectDate.set(Calendar.DAY_OF_MONTH, dayOfMonth)

            var formatDate = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
            val date = formatDate.format(selectDate.time)
            Toast.makeText(this, date, Toast.LENGTH_SHORT).show()
            btnDate.text = date
        }, 1990, 6, 6
    )

    val calendar = Calendar.getInstance()
    val year = calendar[Calendar.YEAR]
    val month = calendar[Calendar.MONTH]
    val day = calendar[Calendar.DAY_OF_MONTH]
    dpd.datePicker.minDate = GregorianCalendar(year - 90, month, day, 0, 0).timeInMillis
    dpd.datePicker.maxDate = GregorianCalendar(year - 10, month, day, 0, 0).timeInMillis
    dpd.show()
})
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- This is main Theme Style for your application! -->
    <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
</style>

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Dialog">
    <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
</style>

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.DatePicker">
    <item name="android:headerBackground">#A500FF</item>
</style>