如何更改Android Spinner日期选择器的背景颜色以匹配Xamarin.Forms中的亮/暗模式?

gijlo24d  于 2022-12-07  发布在  Android
关注(0)|答案(1)|浏览(210)

摘要

我想在Xamarin.Forms中为Android DatePicker使用 * spinner * 模式。这可以在styles.xlm中设置,但这样做总是会导致日期选择器显示为暗而不是亮。我如何既将日期选择器指定为spinner,又使用默认的亮/暗背景呢?
如果有必要的话,我使用的是Xamarin.Forms版本5.0.0.2515(撰写本文时的最新版本)。

详细信息

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

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

我想使用 * spinner * 样式而不是日历样式。这可以通过下面的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>

不幸的是,这似乎使旋转器仍然显示在日历模式,而不是作为一个旋转器(虽然造型工作正常)。
有没有办法实现一个像日历视图一样尊重亮/暗模式的微调器?换句话说,当应用程序处于暗模式时,它显示为暗,而当应用程序处于亮模式时,它显示为亮?
此外,如果它可以在代码中完成,而不是通过styles.xml,那也是可以的。

编辑

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

kx1ctssn

kx1ctssn1#

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

<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>

但我认为这种形式的日期选择器可能不支持黑暗的主题。

相关问题