【问题标题】:Light and dark theme for my Maui Blazor app我的 Maui Blazor 应用程序的明暗主题
【发布时间】:2022-01-12 20:19:49
【问题描述】:

我想在我的 Maui Blazor 应用程序中实现明暗主题。如您所知,Blazor 只不过是 Html 和 Css,因此我可以轻松地为我的应用程序内容实现深色和浅色主题(感谢在 html 标记上添加了一个简单的 .dark 类)。

我面临的问题是 Maui 应用程序的上部和下部。

让我举个例子。

安卓版本

iOS 版本

上面的图片向您展示了当前的情况:左侧为浅色主题,右侧为深色主题。可以看到,深色主题对于顶部和底部是有问题的(iOS版本只有顶部有问题)。

我想要达到的效果:顶部和底部的颜色应该与页面内容相同:

  • #292929 用于深色主题
  • #FFFFFF 用于 Light 主题

类似于下图:当切换到深色主题时,所有东西都是彩色的。

我不知道如何为 Maui Blazor 实现这一目标,也没有使用 Xamarin 的经验。

请您指出正确的方向吗?

您可能知道,BlazorWebView 使您能够直接在 .NET MAUI 应用程序中托管 Blazor Web 应用程序。

【问题讨论】:

  • @ToolmakerSteve 感谢您的链接,我试图从这些示例中启发自己。不幸的是,我对 Xamarin 的体验是空的,所以我未能将其移植到我的毛伊岛项目中。
  • 你能让它在其中一个 xamarin 示例中工作吗?如果是这样,请发布有效的代码(在 xamarin 中),作为您问题的一部分。我的意思是,制作一个 Xamarin Forms 项目,让它在其中工作 - 无需 Blazor 代码。除了 Blazor,准备 MAUI 的最佳方法(在它最终确定并记录之前)是在 XF 中工作。因为有文档、示例和可以提供帮助的人。目前只有经验丰富的 XF 应用程序开发人员可能会在 MAUI 方面走得更远。
  • 如果没有其他办法,我将深入研究 Xamarin Forms(并尝试构建一个工作项目),但老实说,我没想到“简单地”实现暗/亮主题是如此棘手毛伊岛。

标签: blazor maui maui-blazor


【解决方案1】:

在接下来的一两个月内,应该可以通过MAUI Community Toolkit 中的StatusBarEffectNavigationBarEffect 执行此操作。讨论 here - 用于 Xamarin 工具包。

这些效果当前位于 Xamarin.Community.Toolkit 的分支 xamarin.develop 中。更改也将合并到 Maui Toolkit,不确定具体时间。

以下基于该源代码,适用于 MAUI。经过测试。

安卓:

public class MainActivity : MauiAppCompatActivity
{
    protected override void OnCreate(Android.OS.Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetColors();
    }

    private void SetColors()
    {
        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Lollipop) {
            // Aqua.
            var color = Microsoft.Maui.Graphics.Color.FromRgb(0, 255, 255);
            // The thin bar at top of Android screen.
            Window.SetStatusBarColor(color.ToNative());
            // The thicker bar at bottom of Android screen.
            Window.SetNavigationBarColor(color.ToNative());

        }
    }

}

设置应用启动时的颜色。效果将包含动态设置这些颜色所需的额外逻辑。 (在这些效果存在之前,您可以在持久存储中保存一个值,强制您的应用重新启动,读回该标志以了解要应用什么颜色。或者您可以在 Android 中创建一个依赖服务,从 X-Forms 代码中调用。需要使用Device.BeginInvokeOnMainThread。)


iOS:

...待定...

设置状态栏颜色可见ShaXam/iOS/StatusBarStyleManager/

基本的线条是这些(我认为):

UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.DarkContent, false);
            
GetCurrentViewController().SetNeedsStatusBarAppearanceUpdate();

iOS - 未测试。

【讨论】:

  • 非常感谢您的帮助。我今天会试试,我会在这里发布我的结果,让你知道。
猜你喜欢
  • 1970-01-01
  • 2022-10-13
  • 2022-07-19
  • 2022-01-12
  • 2022-10-07
  • 2023-01-30
  • 2022-11-17
  • 2020-03-08
  • 2022-12-22
相关资源
最近更新 更多