Xamarin 应用程序在 Android 设备上自动切换到暗模式
Xamarin app automatically switching to dark mode on Android device with dark mode on
我的 Xamarin.Forms 应用程序(Shell 项目)在启用深色主题的 Android phone 上时会自动切换到深色主题。我不希望这发生。我尝试了多种方法来禁用它,但其中 none 有效。
知道出了什么问题吗?
AppShell.xaml 中代码中有趣的部分是:
<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:retrogamez="clr-namespace:RetroGameZ"
Title="RetroGameZ"
x:Class="RetroGameZ.AppShell">
<Shell.Resources>
<ResourceDictionary>
<Style x:Key="BaseStyle" TargetType="Element">
<Setter Property="Shell.BackgroundColor" Value="#049DBF" />
<Setter Property="Shell.ForegroundColor" Value="White" />
<Setter Property="Shell.TitleColor" Value="White" />
<Setter Property="Shell.DisabledColor" Value="#03A6A6" />
<Setter Property="Shell.UnselectedColor" Value="#D3D3D3" />
<Setter Property="Shell.TabBarBackgroundColor" Value="#049DBF" />
<Setter Property="Shell.TabBarForegroundColor" Value="White"/>
<Setter Property="Shell.TabBarUnselectedColor" Value="#D3D3D3"/>
<Setter Property="Shell.TabBarTitleColor" Value="White"/>
</Style>
<Style TargetType="TabBar" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="FlyoutItem" BasedOn="{StaticResource BaseStyle}" />
</ResourceDictionary>
</Shell.Resources>
后面只有单独的组件。
假设您正在使用 Xamarin.Forms 嵌入式功能来实现 https://devblogs.microsoft.com/xamarin/app-themes-xamarin-forms/ 中提到的主题样式。
尝试在 App.cs
中设置
App.Current.UserAppTheme = OSAppTheme.Light;
如果您没有设置任何东西,或者如果您设置了
App.Current.UserAppTheme = OSAppTheme.Unspecified;
它将遵循您的 os 当前主题。
找到 Android 的解决方案:
在 MainActivity.cs
中,在 base.OnCreate()
之前,添加此行:
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
我尝试了上面的所有解决方案,但只有以下步骤对我有用。
- 打开
MainActivity.cs
并添加 AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
作为 OnCreate
方法的第一行:
protected override void OnCreate(Bundle savedInstanceState)
{
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
base.OnCreate(savedInstanceState);
// ... other Xamarin stuff
}
- 打开
Resources/values/styles.xml
并添加行 <item name="android:forceDarkAllowed">false</item>
:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MainTheme" parent="MainTheme.Base">
<!-- ... other Xamarin stuff -->
<item name="android:forceDarkAllowed">false</item>
<!-- ... other Xamarin stuff -->
</style>
</resources>
参考:
我的 Xamarin.Forms 应用程序(Shell 项目)在启用深色主题的 Android phone 上时会自动切换到深色主题。我不希望这发生。我尝试了多种方法来禁用它,但其中 none 有效。 知道出了什么问题吗?
AppShell.xaml 中代码中有趣的部分是:
<?xml version="1.0" encoding="UTF-8"?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:retrogamez="clr-namespace:RetroGameZ"
Title="RetroGameZ"
x:Class="RetroGameZ.AppShell">
<Shell.Resources>
<ResourceDictionary>
<Style x:Key="BaseStyle" TargetType="Element">
<Setter Property="Shell.BackgroundColor" Value="#049DBF" />
<Setter Property="Shell.ForegroundColor" Value="White" />
<Setter Property="Shell.TitleColor" Value="White" />
<Setter Property="Shell.DisabledColor" Value="#03A6A6" />
<Setter Property="Shell.UnselectedColor" Value="#D3D3D3" />
<Setter Property="Shell.TabBarBackgroundColor" Value="#049DBF" />
<Setter Property="Shell.TabBarForegroundColor" Value="White"/>
<Setter Property="Shell.TabBarUnselectedColor" Value="#D3D3D3"/>
<Setter Property="Shell.TabBarTitleColor" Value="White"/>
</Style>
<Style TargetType="TabBar" BasedOn="{StaticResource BaseStyle}" />
<Style TargetType="FlyoutItem" BasedOn="{StaticResource BaseStyle}" />
</ResourceDictionary>
</Shell.Resources>
后面只有单独的组件。
假设您正在使用 Xamarin.Forms 嵌入式功能来实现 https://devblogs.microsoft.com/xamarin/app-themes-xamarin-forms/ 中提到的主题样式。
尝试在 App.cs
App.Current.UserAppTheme = OSAppTheme.Light;
如果您没有设置任何东西,或者如果您设置了
App.Current.UserAppTheme = OSAppTheme.Unspecified;
它将遵循您的 os 当前主题。
找到 Android 的解决方案:
在 MainActivity.cs
中,在 base.OnCreate()
之前,添加此行:
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
我尝试了上面的所有解决方案,但只有以下步骤对我有用。
- 打开
MainActivity.cs
并添加AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
作为OnCreate
方法的第一行:
protected override void OnCreate(Bundle savedInstanceState)
{
AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
base.OnCreate(savedInstanceState);
// ... other Xamarin stuff
}
- 打开
Resources/values/styles.xml
并添加行<item name="android:forceDarkAllowed">false</item>
:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MainTheme" parent="MainTheme.Base">
<!-- ... other Xamarin stuff -->
<item name="android:forceDarkAllowed">false</item>
<!-- ... other Xamarin stuff -->
</style>
</resources>
参考: