将android主题设置为遵循系统不会更改为当前系统主题

问题描述 投票:0回答:1

在我的应用程序设置中,我可以使用它,以便您可以在应用程序的亮,暗和跟随系统之间切换主题。在它们之间切换是可以的,我拥有所有设置,但是,如果从其他主题之一切换为遵循系统,则如果之前的主题与系统不同,则不会更改为系统主题。

我正在使用此代码切换主题:

        {
            Spinner spinner = (Spinner)sender;
            string selectedSpinnerItem = spinner.GetItemAtPosition(e.Position).ToString();
            string chosenTheme = prefs.GetString("theme", "Light");

            if (selectedSpinnerItem != chosenTheme)
            {
                switch (selectedSpinnerItem)
                {
                    case "Light":
                        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightNo);
                        prefs.Edit().PutString("theme", "Light").Commit();
                        break;
                    case "Dark":
                        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightYes);
                        prefs.Edit().PutString("theme", "Dark").Commit();
                        break;
                    case "System Preference":
                        ((AppCompatActivity)Activity).Delegate.SetLocalNightMode(AppCompatDelegate.ModeNightFollowSystem);
                        prefs.Edit().PutString("theme", "System Preference").Commit();
                        break;
                }
            }
        }

https://imgur.com/a/NBDFMCs

这是我主要活动的一部分。

c# android xamarin.android
1个回答
0
投票

您是否更改主题以从DayNight变体之一扩展,然后调用一种方法来启用该功能?

例如:

<style name="MyTheme" parent="Theme.AppCompat.DayNight">

   .......
</style>

[如果您正在使用Material Design Components(我建议您这样做),那么您也可以使用其v1.1.0版本中的Theme.MaterialComponents.DayNight主题。

您应该知道这两种方法。

setDefaultNightMode

该方法是静态的,因此您可以随时调用它。但是,您设置的值为not在整个进程启动过程中都保持不变,因此您需要在每次启动应用程序进程时进行设置。我建议将其设置在您的应用程序类中(如果有的话)

像这样:

[Application]
class MyApplication:Application
{
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip)
    {
    }
    public override void OnCreate()
    {
        base.OnCreate();

        AppCompatDelegate.DefaultNightMode =
       AppCompatDelegate.ModeNightFollowSystem;
    }
}

setLocalNightMode

为单个活动设置日夜。

您可以通过调用其AppCompatDelegatesetLocalNightMode()覆盖每个组件中的默认值。当您知道只有某些组件应使用DayNight功能或用于开发时,这样就很方便了,这样您就不必坐下来等待晚上下来测试布局。现在,在每个“活动”中使用此方法都是一种反模式,您应该改为使用setDefaultNightMode()

您看起来here越多

© www.soinside.com 2019 - 2024. All rights reserved.