我想在某些视图上更改状态栏的颜色。
我找到了此解决方案https://github.com/yuv4ik/XFDynamicStatusBarAppearance
但是它仅与NavigationPage一起使用。
我不需要从我的应用程序导航页中...
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
这是我的尝试...
var statusBarStyleManager = DependencyService.Get<IStatusBarStyleManager>();
MainCarousel.PositionChanged += (sender, e) =>
{
switch (e.CurrentPosition)
{
case 1:
Device.BeginInvokeOnMainThread(() =>
{
Xamarin.Forms.Application.Current.MainPage.SetValue(Xamarin.Forms.NavigationPage.BarBackgroundColorProperty, Color.DarkCyan);
//((Xamarin.Forms.NavigationPage)Xamarin.Forms.Application.Current.MainPage).BarBackgroundColor = Color.DarkCyan;
statusBarStyleManager.SetDarkTheme();
});
break;
case 0:
case 2:
Device.BeginInvokeOnMainThread(() =>
{
Xamarin.Forms.Application.Current.MainPage.SetValue(Xamarin.Forms.NavigationPage.BarBackgroundColorProperty, Color.LightGreen);
statusBarStyleManager.SetLightTheme();
});
break;
default:
break;
}
};
如何更改状态栏颜色?
您可以尝试在Android平台上的OnCreate方法中添加此代码:
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0)); //here
}
[请注意,SetStatusBarColor仅在API级别21和更高版本中受支持。因此,我们应该在调用SetStatusBarColor之前进行检查。
if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
Window.SetStatusBarColor(...);
}
更新:
在PCL中创建界面:
public interface IStatusBarColor
{
void changestatuscolor(string color);
}
现在,Mainactivity实现此接口。
[assembly: Dependency(typeof(demo2.Droid.MainActivity))]
namespace demo2.Droid
{
[Activity(Label = "demo2", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity,IStatusBarColor
{
public static Context context;
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public void changestatuscolor(string color)
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var c = MainActivity.context as FormsAppCompatActivity;
c?.RunOnUiThread(() => c.Window.SetStatusBarColor(Android.Graphics.Color.ParseColor(color)));
}
}
protected override void OnResume()
{
context = this;
base.OnResume();
}
}
}
在主页中,更改按钮单击事件中的状态栏颜色。
private void Changecolor_Clicked(object sender, EventArgs e)
{
DependencyService.Get<IStatusBarColor>().changestatuscolor(Color.Red.ToHex());
}