【问题标题】:How can I change the Android Spinner Date Picker background color to match light/dark mode in Xamarin.Forms?如何更改 Android Spinner Date Picker 背景颜色以匹配 Xamarin.Forms 中的亮/暗模式?
【发布时间】:2022-09-27 14:45:53
【问题描述】:

概括

我想使用微调器Xamarin.Forms 中 Android DatePicker 的模式。这可以在styles.xlm 中设置,但这样做总是会导致日期选择器显示为暗而不是亮。如何将日期选择器指定为微调器以及使用默认的浅色/深色背景。

如果重要的话,我使用的是 Xamarin.Forms 版本 5.0.0.2515(撰写本文时的最新版本)。

细节

默认情况下,Xamarin.Forms 为日期选择器使用日历样式弹出窗口:

这个选择器似乎也尊重 Android 设置中设置的明暗主题:

我想使用微调器样式而不是日历样式。这可以通过以下 styles.xml 来完成:

<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<resources>

    <style name=\"MainTheme\" parent=\"MainTheme.Base\">
        <item name=\"android:datePickerDialogTheme\">@style/Theme.picker</item>
    </style>

    <style name=\"Theme.picker\" parent=\"android:Theme.Material.Dialog\">
        <item name=\"android:datePickerStyle\">@style/MyDatePicker</item>
    </style>
    <style name=\"MyDatePicker\" parent=\"android:Widget.Material.DatePicker\">
        <item name=\"android:datePickerMode\">spinner</item>
    </style>
</resources>

但是,这样做会导致微调器弹出窗口始终以深色背景显示,无论 Android 手机处于浅色还是深色模式,如下图所示:

我想这是因为我使用的父样式正在控制颜色(parent=\"android:Theme.Material.Dialog\"parent=\"android:Widget.Material.DatePicker\"),但是如果我删除样式上的parent 分配,我会收到以下错误:

resource style/Theme (aka com.xxxxx.android:style/Theme) not found. xxxxx.Android           

我也直接尝试在主样式中设置 android.datePickerMode ,如下所示:

<?xml version=\"1.0\" encoding=\"utf-8\" ?>
<resources>
    <style name=\"MainTheme\" parent=\"MainTheme.Base\">
        <item name=\"android:datePickerMode\">spinner</item>
    </style>
</resources>

不幸的是,这似乎使微调器仍然以日历模式显示,而不是作为微调器(尽管样式工作正常)。

有没有办法像日历视图一样实现尊重明/暗模式的微调器?

编辑

我用过Xamarin.Forms渲染器修改标准控件的外观,但我只知道如何通过渲染器修改 Date 对象(看起来像一个文本框)。我不知道是否有一种方法可以修改在点击 Date 对象时显示为弹出窗口的选择器。

    标签: android xamarin android-styles


    【解决方案1】:

    我已经测试了您提供的代码。是的,这可以更改日期选择器表单。然后您可以添加项目以更改背景颜色和文本颜色。

    <style name="MainTheme" parent="MainTheme.Base">
        <item name="android:datePickerDialogTheme">@style/Theme.picker</item>
        
    </style>
    
    <style name="Theme.picker" parent="android:Theme.Material.Dialog">
        <item name="android:datePickerStyle">@style/MyDatePicker</item>
        <item name="android:textColorPrimary">#ff0000</item>
        //body color
        <item name="android:windowBackground">@android:color/white</item>
        //all the dialog color
    </style>
    <style name="MyDatePicker" parent="android:Widget.Material.DatePicker">
        <item name="android:datePickerMode">spinner</item>
        //number color
    </style>
    

    但我认为这种形式的 Datepicker 可能不支持深色主题。

    【讨论】:

    • 很抱歉,但我认为这不能回答问题。
    • 我改变了我的答案,你可以检查一下。
    猜你喜欢
    • 2021-07-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2022-12-07
    相关资源
    最近更新 更多