【发布时间】:2020-10-11 09:37:43
【问题描述】:
我正在关注Respond to system theme change 以响应 xamarin 表单应用程序中的操作系统主题。该应用程序支持带有AppThemeBinding 的深色和浅色主题。我没有使用任何自定义主题。我只关注操作系统主题。所以我有一个Switch,用户更愿意启用暗模式(与操作系统相同)。该链接建议使用以下代码来启用指定模式(例如暗模式)。
Application.Current.UserAppTheme = OSAppTheme.Dark;
上面的代码什么都不做,但是如果我把上面的代码写在App.cs中InitializeComponent()之后,app就会变成Dark Mode。
然后我意识到在 Dependency 的帮助下重新启动了 Android 中的 MainActivity。
[assembly: Dependency(typeof(AndroidThemeChanged))]
public class AndroidThemeChanged : ITheme
{
public void OnThemeChanged()
{
var activity = CrossCurrentActivity.Current.Activity;
var intent = GetLauncherActivity();
activity.Finish();
activity.StartActivity(intent);
}
public static Intent GetLauncherActivity()
{
var packageName = AndroidApp.Context.PackageName;
return AndroidApp.Context.PackageManager.GetLaunchIntentForPackage(packageName);
}
}
然后调用它
if (Device.RuntimePlatform == Device.Android)
DependencyService.Get<ITheme>().OnThemeChanged();
有没有什么方法可以在不重启MainActivity的情况下更新应用程序主题而不考虑OS theme(暗/亮)?
【问题讨论】:
-
您是否尝试过使用
OSAppTheme currentTheme = Application.Current.RequestedTheme;在启动时获取当前主题? docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/… -
嗯,这会给我当前应用的主题。如果我在应用程序启动时在 App.cs 中应用 OS 主题,则应用程序会接受该主题。但是,我想要的是在运行时更改我的应用程序中的操作系统主题。 (例如)操作系统主题是 Light,但用户想要启用 OS Dark 主题,所以我必须应用 Application.Current.UserAppTheme = OSAppTheme.Dark; (除非我重新启动我的应用程序,否则这不会立即更改我的应用程序主题)
-
请更新您的问题,因为您的最后一句话有点令人困惑 -
to update application to follow the OS theme。您想要的不是改变“OS”主题,而是拥有一个独立的应用程序主题,它不跟踪OS主题的配置。
标签: xamarin.forms xamarin.android xamarin.ios