Xamarin 应用程序在开启深色模式的 Android 设备上自动切换到深色模式

Zoe*_*ngl 6 android xamarin.android xamarin xamarin.forms android-darkmode

当在启用了深色主题的 Android 手机上时,我的 Xamarin.Forms 应用程序(Shell 项目)会自动切换到深色主题。我不希望这种事发生。我尝试了多种方法来禁用此功能,但没有一个起作用。知道出了什么问题吗?

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>
Run Code Online (Sandbox Code Playgroud)

后来就只有单独的组件了。

ʞᴉɯ*_*ʞᴉɯ 10

找到了Android的解决方案:

在 中MainActivity.cs,之前base.OnCreate()添加以下行:

AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;
Run Code Online (Sandbox Code Playgroud)


Âng*_*tto 6

我尝试了上述所有解决方案,但只有以下步骤对我有用。

  1. 打开MainActivity.cs并添加方法AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;的第一行OnCreate
protected override void OnCreate(Bundle savedInstanceState)
{
    AppCompatDelegate.DefaultNightMode = AppCompatDelegate.ModeNightNo;

    base.OnCreate(savedInstanceState);
   // ... other Xamarin stuff
}
Run Code Online (Sandbox Code Playgroud)
  1. 打开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>
Run Code Online (Sandbox Code Playgroud)

参考:https ://stackoverflow.com/a/64339016/6846888