我正在Mac上使用Xamarin表单构建一个跨平台应用程序,使用Mac的可视化代码。
我需要能够更改状态栏文本和背景颜色的iOS和Android版本的应用程序。
我尝试了James Montemagno视频中的解决方案。https://www.youtube.com/watch?v=GKJRR8_DSSs
所以每件事都是好的,直到我们需要使用这个代码window.DecorView.SystemUiVisibility
这个代码是过时的,Visual Studio不提供任何提示,我可以用什么代替.我试着找到,但我得到的是Android本机相关信息1 .
我真的希望我不必使用“原生”代码来做一些移动的应用程序开发中的基本事情。我知道使用Shell类将允许我使用尽可能少的“原生”代码,如果可能的话,我真的希望避免编写任何原生代码。
上下文:我需要设置Android版本的应用程序,使其具有白色状态栏和黑色文本。此外,我有1个黑色背景图像的页面,所以在这个页面上,我需要状态栏是透明的,并使用白色的前景颜色。
那么,window.DecorView.SystemUiVisibility = darkStatusBarTint ? flag : 0;
?的替代项是什么呢?
该应用面向Android API 30。
这是视频中的代码
From main project stub
using System;
using System.Drawing;
namespace MyApp.Helpers
{
public interface IEnvironment
{
void SetStatusBarColor(Color color, bool darkStatusBarTint);
}
}
From android stub
using System;
using System.Drawing;
using System.Runtime.CompilerServices;
using Android.OS;
using EGrid18.Helpers;
using Xamarin.Essentials;
using Xamarin.Forms;
using Color = System.Drawing.Color;
using DependencyAttribute = Xamarin.Forms.DependencyAttribute;
[assembly: Dependency(typeof(MyApp.Droid.Environment))]
namespace MyApp.Droid
{
public class Environment: IEnvironment
{
public void SetStatusBarColor(Color color, bool darkStatusBarTint)
{
if (Build.VERSION.SdkInt < Android.OS.BuildVersionCodes.Lollipop)
return;
var activity = Platform.CurrentActivity;
var window = activity.Window;
window.AddFlags(Android.Views.WindowManagerFlags.DrawsSystemBarBackgrounds);
window.ClearFlags(Android.Views.WindowManagerFlags.TranslucentStatus);
window.SetStatusBarColor(color.ToPlatformColor());
if(Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)
{
var flag = (Android.Views.StatusBarVisibility)Android.Views.SystemUiFlags.LightStatusBar;
#pragma warning disable CS0618 // Le type ou le membre est obsolète
//problen is here
window.DecorView.SystemUiVisibility = darkStatusBarTint ? flag : 0;
#pragma warning restore CS0618 // Le type ou le membre est obsolète
}
}
}
}
2条答案
按热度按时间5lwkijsr1#
如果要确保在设置状态栏颜色时状态栏文本和图标保持清晰,则可以执行下列操作:
然后在“活动”中按如下方式调用它:
fdbelqdn2#
由于 systemUiVisibility 属性已过时,您可以使用 WindowInsetsControllerCompat。请参阅jamesmontemagno's MyCoffeeApp并尝试以下代码:
这意味着如果将 AppearanceLightStatusBars 设置为true,则会将状态栏的前景色更改为浅色,以便可以清楚地读取状态栏上的项目。
有关详细信息,请参见WindowInsetsControllerCompat
希望对你有用。