Я следую Отвечать на изменение системной темы , чтобы ответить на тему ОС в приложении формы xamarin. Приложение поддерживает как темные, так и светлые темы с AppThemeBinding
. Я не использую никаких пользовательских тем. Я слежу только за темами ОС. Итак, у меня есть Switch
, который пользователь предпочел бы включить темный режим (такой же, как ОС). Ссылка предлагает следующий код для включения указанного режима (например, темного режима).
Application.Current.UserAppTheme = OSAppTheme.Dark;
Приведенный выше код ничего не делает, но если я напишу приведенный выше код в App.cs после InitializeComponent()
, приложение изменится на Dark Mode
.
Затем я решил перезапустить MainActivity
в Android, что я сделал с помощью Dependency.
[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
?