我的 MAUI 应用程序分为一个登录页面和两个 shell,适用于每种类型的用户(正常,主题为蓝色,管理,主题为红色),我不仅希望 shell 内的内容以颜色为主题,还有它之外的东西,比如基色。从一开始,
Resources/Styles/Colorx.xaml
和Platforms/Android/Resources/Values/colors.xaml
中的很多颜色都设置为蓝色,这很好,因为登录页面和普通用户 shell 都应该是蓝色的。但是,如果有些部分是红色,有些是蓝色,则管理部分看起来很糟糕,因此如果用户具有管理权限,我想将这些颜色更改为红色。假设,UserIsAdministrative()
正在被触发。我需要做什么来更改资源?
这就是我的 Colors.xaml 和 Android/colors.xaml 的样子(我省略了其他不相关的颜色)
<ResourceDictionary
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<!-- Note: For Android please see also
Platforms\Android\Resources\values\colors.xml -->
<Color x:Key="AdministrativeColor">#E3004F</Color>
<Color x:Key="NormalColor">#0076BD</Color>
<Color x:Key="Primary">#0076BD</Color>
<Color x:Key="Tertiary">#0076BD</Color>
<SolidColorBrush x:Key="PrimaryBrush" Color="{DynamicResource Primary}"/>
<SolidColorBrush x:Key="TertiaryBrush" Color="{DynamicResource Tertiary}"/>
</ResourceDictionary>
Android Part
<resources>
<color name="colorPrimary">#0076BD</color>
<color name="colorPrimaryDark">#0076BD</color>
<color name="colorAccent">#0076BD</color>
</resources>
当触发
UserIsAdministrative()
时,所有颜色应变为 #E3004F
/ AdministrativeColor
。
希望您明白我的意思,谢谢!
这是更改 Android 主题的解决方法。
首先,在
styles.xml
文件夹中创建一个 Platforms/Android/Resources/values
,与 color.xml 位于同一位置。并将 MAUI 源代码中的所有代码粘贴到 styles.xml 中。
现在我们有了新的
styles.xml
。打开它并在顶部添加这些代码,
<!-- Base application theme. -->
<style name="AdminTheme" parent="Theme.MaterialComponents.DayNight">
<item name="colorPrimary">@color/colorPrimaryAdmin</item>
<item name="colorPrimaryDark">@color/colorPrimaryDarkAdmin</item>
<item name="colorAccent">@color/colorAccentAdmin</item>
<item name="android:actionMenuTextColor">@color/colorActionMenuTextColor</item>
<item name="appBarLayoutStyle">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="bottomNavigationViewStyle">@style/Widget.Design.BottomNavigationView</item>
<item name="materialButtonStyle">@style/MauiMaterialButton</item>
<item name="checkboxStyle">@style/MauiCheckBox</item>
<item name="android:textAllCaps">false</item>
<item name="alertDialogTheme">@style/MauiAlertDialogTheme</item
</style>
从上面你就可以看出。我们添加一个新的
AdminTheme
。我要做的就是根据不同的情况切换AdminTheme
和Maui.MainTheme
。
为此,我们可以重写
OnCreate
中的 MainActivity.cs
方法。在此方法中,我使用 Preferences 来存储值。如果当前用户是admin,则将其设置为AdminTheme
。
protected override void OnCreate(Bundle? savedInstanceState)
{
if(Preferences.Default.Get("IsAdmin",true)
{
SetTheme(Resource.Style.AdminTheme);
}
base.OnCreate(savedInstanceState);
}
最后就是触发这个方法。假设我们被识别为admin,那么设置
Preferences.Default.Set("IsAdmin", true);
#if Android
Platform.CurrentActivity.Recreate();
#endif