如何对Android MaterialCalendars各个组件进行风格化处理?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对Android MaterialCalendars各个组件进行风格化处理?相关的知识,希望对你有一定的参考价值。

我正尝试着把这个 MaterialCalendar但我没有得到任何帮助,任何帮助将是感激的。styles.xml 看起来类似于下面的。

 <style name="AppTheme" parent="Theme.MaterialComponents">
    <item name="materialCalendarTheme">@style/ThemeMaterialCalendar</item>
</style>

<style name="ThemeMaterialCalendar" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
    <item name="buttonBarPositiveButtonStyle">@style/AlterDialogButtonStyle</item>
    <item name="buttonBarNegativeButtonStyle">@style/AlterDialogButtonStyle</item>
    <item name="materialButtonStyle">@style/ThemeMaterialCalendarTextButton</item>
    <item name="android:colorAccent">@color/accent</item>
</style>

<style name="ThemeMaterialCalendarTextButton" parent="Widget.MaterialComponents.Button.TextButton.Dialog.Flush">
    <item name="android:textColor">?attr/colorAccent</item>
</style>

<style name="AlterDialogButtonStyle" parent="Widget.MaterialComponents.Button.TextButton">
    <item name="android:textColor">?attr/colorAccent</item>
</style>

呈现的是这样的:

enter image description here

非常轻的蓝燕是我的 colorAccent 头部是紫色的颜色。这些都很好。我可以用上面的方法来改变它们 styles.xml.

然而,我也想改变深灰色背景下的 MaterialCalendar 为白色,然后当然将文字从白色改为黑色或灰色(这样就可以看到了),以及为月份和年份的选择做箭头。任何被选中的年份或日期都应该用重音色高亮显示。

本质上我想要类似于这样的东西(请忽略下面的截图是旧的 DatePickerDialog 而不是新的 MaterialCalendar):

enter image description here

任何帮助都将是非常感激的。

PS:我不想改变我的主色、次色或整个应用程序的重点颜色(因为它会破坏其余的配色方案)。

答案

自定义颜色的最好方法是在 MaterialDatePicker 是为了覆盖它们。

<style name="MaterialCalendarThemeBackground" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
    <item name="colorSurface">@color/....</item>
    <item name="colorOnSurface">@color/....</item>
    <item name="colorPrimary">@color/....</item>      
    <item name="colorOnPrimary">@color/....</item>
</style>

然后使用。

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
builder.setTheme(R.style.MaterialCalendarThemeBackground);

这个 背景色MaterialDatePicker 是基于 colorSurface 属性。

<style name="MaterialCalendarThemeBackground" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
    <item name="colorSurface">@color/....</item>
</style>

enter image description here

相反,如果你想改变其他颜色,使用自定义样式,你可以做到。

  • :它的基础是 colorOnSurface. 你可以定义。
    <style name="MaterialCalendarThemeBackground" parent="ThemeOverlay.MaterialComponents.MaterialCalendar">
        <item name="materialCalendarStyle">@style/CustomMaterialCalendar</item>
    </style>

与:

<style name="CustomMaterialCalendar" parent="Widget.MaterialComponents.MaterialCalendar">
    <item name="dayStyle">@style/CustomWidget_Day</item>
</style>

<style name="CustomWidget_Day" parent="Widget.MaterialComponents.MaterialCalendar.Day">
    <item name="itemTextColor">@color/...</item>
    <item name="itemStrokeColor">@color/....</item>
</style>
  • 选定日期:它的基础是 colorPrimarycolorOnPrimary. 你可以定义。
    <style name="CustomMaterialCalendar" parent="Widget.MaterialComponents.MaterialCalendar">
       <item name="daySelectedStyle">@style/CustomSelected</item>
    </style>

与:

  <style name= "CustomSelected" parent="Widget.MaterialComponents.MaterialCalendar.Day.Selected">
    <item name="itemFillColor">...</item>
    <item name="itemTextColor">...</item>
  </style>

以上是关于如何对Android MaterialCalendars各个组件进行风格化处理?的主要内容,如果未能解决你的问题,请参考以下文章

Android 对线程封装了:AsyncTask, HandlerThread和线程池。 有知道这三个如何选择吗?

如何知道特定用户是不是对 Android 应用进行了评分?

如何对像whatsapp这样的android通知进行分组?

如何对Android的版本进行检测与更新

如何在 Flutter 中使 StatusBar 对 Android 透明

Android如何对JSONObjects的JSONArray进行排序