【问题标题】:Date Picker Dialog with AppCompat theme带有 AppCompat 主题的日期选择器对话框
【发布时间】:2024-01-15 03:55:01
【问题描述】:

在上图中(不用担心日历定位),除了所选日期的绿色之外,整个日历都是正确的主题颜色。我已经尝试了很多东西,但无法更改主题的最后一部分!我正在使用 Theme.AppCompat.Light.DarkActionBar 并通过更改 DatePickerDialogTheme 的 colorAccent 到达当前点。我也试过改变

  • dayOfWeekBackground
  • dayOfWeekTextAppearance
  • headerMonthTextAppearance
  • headerDayOfMonthTextAppearance
  • headerYearTextAppearance
  • headerSelectedTextColor
  • yearListItemTextAppearance
  • 年份ListSelectorColor
  • 日历文本颜色
  • calendarSelectedTextColor

而那些似乎并没有这样做。这是我的 XML,提前谢谢!

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorRed</item>
        <item name="colorPrimaryDark">@color/colorRed</item>
        <item name="colorAccent">@color/colorRed</item>
        <item name="android:datePickerDialogTheme">@style/MyDatePickerDialogTheme</item>
    </style>

    <style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:colorAccent">@color/colorRed</item>
    </style>

【问题讨论】:

  • 尝试改变colorControlNormal

标签: android datepicker themes android-appcompat


【解决方案1】:

要更改所选日期的圆圈颜色,请使用

    <item name="android:colorControlActivated">@color/your_colour</item>

【讨论】:

    【解决方案2】:

    使用这个主题

    <style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog">
     <item name="android:colorAccent">@color/colorRed</item>
     <item name="android:datePickerStyle">@style/MyDatePickerStyle</item>
     <item name="android:colorAccent">@color/primaryDark</item>
    </style>
    

    <style name="MyDatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
     <item name="android:headerBackground">@color/primary</item>
     <item name="android:calendarTextColor">@color/primaryDark</item>
     <item name="android:dayOfWeekBackground">@color/primaryDark</item>
     <item name="android:yearListSelectorColor">@color/accent</item>
     <item name="android:datePickerMode">calendar</item>
    </style>
    

    【讨论】:

    【解决方案3】:

    对于所选日期的颜色,您必须使用 colorAccent,这对我有用:

    <style name="PopupDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
        <!--selected day's color: define your own-->
        <item name="colorAccent">@color/yourColour</item>
    </style>
    

    并在你的类中像这样实例化:

    final AlertDialog.Builder datePickerBuilder = new AlertDialog.Builder(ProviderMainActivity.this, R.style.PopupDialogTheme);
    // ... do something with your dialog, i.e. .show()
    

    关于问题中提到的 其他属性:查找 their reference 并找出它们采用的参数(在 xml 中)。 例如,要在标题中设置年/月/日的颜色,您必须像这样定义文本外观(CodeFont):

    <DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/dpPickDate"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerHorizontal="true"
        android:headerBackground="@drawable/calendar_header"
        android:headerYearTextAppearance="@style/YourCodeFont"
        android:headerMonthTextAppearance="@style/YourCodeFont"
        android:headerDayOfMonthTextAppearance="@style/YourCodeFont"/>
    

    注意 YourCodeFont,您需要在 styles.xml 中定义它:

    <style name="PopupCodeFont" parent="@android:style/TextAppearance.Medium">
        <item name="android:textColor">@color/black</item>
    </style>
    

    例如,您不能这样做:

    android:headerYearTextAppearance="@color/black"
    

    另请注意,其中一些属性(例如 headerYearTextAppearance)需要 API 21+,因此可以更好地处理和测试以前的版本。

    【讨论】: