【问题标题】:Manually apply dark theme in Xamarin.Forms在 Xamarin.Forms 中手动应用深色主题
【发布时间】:2021-11-06 06:39:08
【问题描述】:

我目前正在使用 Xamarin.Forms 创建一个 Android 应用。我正在尝试实现一个设置菜单,用户可以在其中选择他/她想要使用的主题(系统默认/浅色/深色)。系统默认工作正常,深色主题和浅色主题按预期工作。

查看图片: Light theme Dark theme

我遇到的问题是我似乎无法手动将应用设置为暗模式。我的意思是我能够改变例如颜色背景和文本,但不是 DisplayAlert 或占位符文本的背景颜色。

我尝试使用Application.Current.UserAppTheme = OSAppTheme.Dark;,但这似乎没有任何作用(我通过将Application.Current.UserAppTheme 打印到控制台来检查它实际上是设置的)。我在这里想念什么?如何手动设置深色主题,使对话框看起来如上图所示。

任何帮助将不胜感激。

芬恩

【问题讨论】:

  • 您是否为明暗主题创建或编写了样式?

标签: c# xamarin.forms theming


【解决方案1】:

Application.Current.UserAppTheme 只适用于AppThemeBinding 定义的主题,但是对话框是内置的,我们无法自定义颜色,所以它不会以这种方式工作。

要手动启用/禁用黑暗主题,我们必须在每个平台上实现并在带有Dependency service的表单中调用它。

安卓解决方案

  1. 更改styles.xml中的默认主题。
 <style name="MainTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>  
  </style>
  1. 在表单中定义一个新的interface
 public interface IChangeTheme
    {
        void EnableDarkTheme(bool _);
    }
  1. Android平台实现
[assembly: Dependency(typeof(Changetheme))]
namespace FormsApp.Droid
{
    class Changetheme : IChangeTheme
    {
        public void EnableDarkTheme(bool _)
        {
            AppCompatDelegate.DefaultNightMode = _ ? AppCompatDelegate.ModeNightYes : AppCompatDelegate.ModeNightNo;
        }
    }
}
  1. 在表单中调用
DependencyService.Get<IChangeTheme>().EnableDarkTheme(true);

参考https://stackoverflow.com/a/61891471/8187800

iOS 解决方案

与 android 解决方案相同,我尚未对其进行测试,但它应该可以工作, 参考https://stackoverflow.com/a/60171521/8187800

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多