微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Forms 如何在 API 30 (Android 11) 中更改 Android 状态栏图标颜色

如何解决Xamarin Forms 如何在 API 30 (Android 11) 中更改 Android 状态栏图标颜色

我有一个为 iOS 和 Android 构建的 Xamarin.Forms 应用。

在设置状态栏颜色时,我在 Android 更新图标颜色方面遇到了一些困难。我使用以下代码为低于 30 的 API 级别工作:

var isLight = false;

Window currentwindow = Platform.CurrentActivity.Window;

if (Color.FromHex(hexColor).Luminosity > 0.5)
{
    isLight = true;
}

currentwindow.SetStatusBarColor(androidColor);

currentwindow.DecorView.systemUIVisibility = isLight ? (StatusBarVisibility)(systemUIFlags.LightStatusBar) : 0;

据我所知,DecorView.systemUIVisibility 在 API 30 中已弃用,应该替换为 window.insetsController

我不知道这个 API 是否/在哪里在 Xamarin 中公开供我使用。

我看了这个问题: How to change the status bar color without a navigation page

按照最后一个答案,我尝试使用:

var lightStatusBars = isLight ? WindowInsetsControllerAppearance.LightStatusBars : 0;

currentwindow.InsetsController?.SetSystemBarsAppearance((int)lightStatusBars,(int)lightStatusBars);

但它不会构建,说 Window 没有 InsetsController

有没有人解决过这个问题?我绝对需要支持最新的 Android,这个功能让我很崩溃

提前致谢!

解决方法

您的代码看起来正确。将目标框架更改为 Android 11.0 (R)。 InsetsController 是在 API 级别 30 中添加的。因此,您可能会收到构建错误。

enter image description here

 public void UpdateStatusBarColor(String color)
  {
      Window.SetStatusBarColor(Color.ParseColor(color));
      if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
      {
          Window?.InsetsController?.SetSystemBarsAppearance((int)WindowInsetsControllerAppearance.LightStatusBars,(int)WindowInsetsControllerAppearance.LightStatusBars);
      }
      else
      {
          #pragma warning disable CS0618
          Window.DecorView.SystemUiVisibility = (StatusBarVisibility)SystemUiFlags.LightStatusBar;
          #pragma warning restore CS0618
      }
  }
,

你可以在 MainActivity.cs 中试试这个吗

$ Window.SetStatusBarColor(Android.Graphics.Color.Argb(255,114,75,203));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。