切换DayNight主题Android Xamarin

时间:2020-03-31 19:51:55

标签: c# android android-fragments xamarin.android

我正在尝试使用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;
 }

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

1 个答案:

答案 0 :(得分:1)

首先,您的代码仅适用于AndroidQ。 https://developer.android.com/guide/topics/ui/look-and-feel/darktheme#force_dark

如果您希望它起作用,也可以像下面的代码一样在<item name="android:forceDarkAllowed">true</item>中添加styles.xml

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

我在((AppCompatActivity)this).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightYes);方法中使用OnCreate进行设置。这里正在运行sceenshot。

enter image description here

更新

当我更改主题时,将创建活动。 enter image description here

这是我的演示。 https://github.com/851265601/Xamarin.Android_ListviewSelect/blob/master/App16.zip