如何解决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 中添加的。因此,您可能会收到构建错误。
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 举报,一经查实,本站将立刻删除。