Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 切换日夜主题Android Xamarin_C#_Android_Android Fragments_Xamarin.android - Fatal编程技术网

C# 切换日夜主题Android Xamarin

C# 切换日夜主题Android Xamarin,c#,android,android-fragments,xamarin.android,C#,Android,Android Fragments,Xamarin.android,我正在尝试使用android daynight主题在我的android应用程序中实现一个黑暗主题。它目前改变了主题,但我认为它不会像我希望的那样重新创建活动。在java中,他们有AppCompatDelegate.setDefaultNightMode,它显然现在自动重新创建活动,但我在xamarin android中找不到c方式来实现这一点 我目前的做法是: switch (selectedSpinnerItem) { case "Light": ((AppCompat

我正在尝试使用android daynight主题在我的android应用程序中实现一个黑暗主题。它目前改变了主题,但我认为它不会像我希望的那样重新创建活动。在java中,他们有AppCompatDelegate.setDefaultNightMode,它显然现在自动重新创建活动,但我在xamarin android中找不到c方式来实现这一点

我目前的做法是:

switch (selectedSpinnerItem)
{
    case "Light":
        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightNo);
        break;
    case "Dark":
        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightYes);
        break;
    case "System Preference":
        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightFollowSystem);
         break;
 }

我认为这不是正确的方法。

首先,您的代码在Android Q中工作正常。

如果您想让它工作,您可以在styles.xml中添加true,就像下面的代码一样

<resources>

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

</resources>
我使用AppCompativeThis.Delegate.SetLocalNightModeAppCompativeDelegate.ModeNightYes设置它;在OnCreate方法中。这是跑步

更新

当我更改主题时,将创建活动。

这是我的演示。

您可以在style.xml中创建多个样式,然后通过AppSettings设置主题,您可以参考此链接。@LeonLu MSFT我已经开发了一个实现此功能的版本,但是在检测系统使用的主题时,使用daynight主题似乎更好,但是很难找到类似文档的任何c副本,尽管我在这里找到了位,以及上面看到的位。我知道我已经让它工作了,但是它不会像developer.android.com/guide/topics/ui/look-and-feel/darktheme上描述的方法那样重新创建活动并破坏旧的活动。我将尝试更多的实验,但似乎它没有在xamarin中实现,所以我需要找到一个解决方法。是否切换活动将破坏的光明和黑暗主题,然后重新创建?我在安卓Q上测试了它,它正常工作。请查看我的更新答案。@euandeas是否有此问题的更新?如果答案有帮助,请不要忘记标记此答案,它将帮助其他有类似问题的人。虽然这确实有助于我找到一个不同的更简单的解决方案,并意识到我做错了什么。不过谢谢你的帮助。我的一个问题是,出于某种原因,当我切换到跟随系统时,如果上一个主题与操作系统主题不同,它不会更改当前操作系统主题…对此有任何修复吗?