在Xamarin中,如何检测用户何时更改主题(黑暗模式)

xxe27gdn  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(110)

我想对用户在应用程序“外部”更改的主题做出React。

Application.Current.RequestedThemeChanged += (s, a) =>
{
      TLog.Info("[X][AppEvent]", $"Current App theme will be changed to '{a.RequestedTheme}'");
      //Do some UI adjustments
};

根据这个文档,在我的MainActivity.cs文件中,我添加了ConfigChanges.UiMode

[Activity(Label = "DringCat", Icon = "@mipmap/icon", Theme = "@style/MainTheme", ScreenOrientation = ScreenOrientation.Portrait, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
        public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity

如果用户正在从应用程序更改主题(例如:我应用Application.Current.UserAppTheme = UserChoice)事件被触发。但是,当用户手动更改Android顶部栏中的主题(圆圈设置)时,不会发生任何事情。所以,当他关闭顶部栏显示时,我的应用程序没有对更改做出React。我需要等待一个“OnResume”本地方法来检查系统当前主题并应用新主题。
我做错什么了吗?
我在网上找到的所有解决方案似乎都以文档结束(链接后),所以我开始认为我错过了一些东西...

htzpubme

htzpubme1#

我发现的最简单的方法是从mainactivity.cs(Android项目端)对OntagationChanged做出React。

public override void OnConfigurationChanged(Configuration newConfig)
        {
            base.OnConfigurationChanged(newConfig);

            DependencyService.Get<IAndroidServices>().AlertConfigurationChanged();
        }

我的AndroidService服务触发了一个可以在编写应用行为的共享项目端侦听的事件,因此我可以更新UI。

相关问题