我有三个单选按钮用于选择应用的主题:Default
,它应该应用在Android的系统设置中选择的任何主题,Light
和Dark
。
问题是,无论何时我选择了Default
单选按钮,它都不会像我期望的那样返回一个标准值,而是返回OSAppTheme.Light
或OSAppTheme.Dark
,无论之前的设置是什么,换句话说,它重新应用了之前的设置。
下面是我的代码:
private void DarkMode(object sender, CheckedChangedEventArgs e)
{
if (defaultRadioButton.IsChecked == true)
{
if (Application.Current.RequestedTheme != OSAppTheme.Unspecified)
{
Application.Current.UserAppTheme = Application.Current.RequestedTheme;
}
else
{
Application.Current.UserAppTheme = OSAppTheme.Light;
}
}
else if (lightRadioButton.IsChecked == true)
{
Application.Current.UserAppTheme = OSAppTheme.Light;
}
else if (darkRadioButton.IsChecked == true)
{
Application.Current.UserAppTheme = OSAppTheme.Dark;
}
}
我的印象是Application.Current.RequestedTheme
总是携带系统的设置,从我遇到的行为来看,我猜这不是真的。
如果Application.Current.RequestedTheme
没有获得系统的主题设置,那么检测用户是否在操作系统级别启用了Dark Mode
的正确方法是什么?
1条答案
按热度按时间8zzbczxx1#
根据Manually apply dark theme in Xamarin.Forms的这种情况,
Application.Current.UserAppTheme
只适用于AppThemeBinding定义的主题。因此,如果要使用此属性更改用户界面的主题,则需要在控件中使用AppThemeBinding,例如官方文档中的示例代码。
此外,
Application.Current.RequestedTheme
确实可以获取设备系统的当前主题,但您也可以尝试在MainActivity中使用以下代码获取android设备的当前主题:然后,您可以在Project.Droid/Resource/values/style.xml中声明一个dark主题并使用它,或者像官方文档那样使用
AppThemeBinding
在应用程序中应用dark主题。1.将设备的主题设置为深色
1.调用上面的代码:
值会变暗。应该是bug,你可以在github上报告。