我跟踪对系统主题变化的响应,以响应xamarin表单应用程序的操作系统主题。该应用程序支持黑暗和光明的主题与AppThemeBinding。我没有使用任何定制的主题。我只关注操作系统的主题。因此,我有一个Switch,用户更愿意启用暗模式(与操作系统相同)。该链接建议使用以下代码来启用指定的模式(例如暗模式)。
Application.Current.UserAppTheme = OSAppTheme.Dark;上面的代码什么也不做,但是如果我在App.cs之后用InitializeComponent()编写上面的代码,应用程序就会更改为Dark Mode。
然后,我意识到在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();是否有任何方法不考虑OS theme (黑暗/光明)而更新应用程序主题而不重新启动MainActivity
发布于 2020-06-21 14:42:27
我的错,我想我错了。我问题中的代码如预期的那样工作。我不需要让Android服务重新启动活动。无论操作系统主题如何,从任何更改主题到黑暗的地方调用下面的内容。
Application.Current.UserAppTheme = OSAppTheme.Dark;
https://stackoverflow.com/questions/62498952
复制相似问题