Xamarin.Forms - 更改StatusBar颜色

时间:2016-06-23 13:56:34

标签: xamarin.forms statusbar

我搜索但是我无法找到是否可以从我的便携式代码更改每个平台的StatusBar颜色? (对于av_frame_unref(pFrameYuv);

Android, iOS & WinPhone 8.1

8 个答案:

答案 0 :(得分:18)

这真的很容易。

快速回答

只需添加此行

即可
MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);

或者,如果您从NavigationPage继承,则可以使用

进行
BarBackgroundColor = Color.Black;

详细答案 你有两个选择。让我们看看它们。

选项1

public App()
{
  MainPage = new MainPageUser();

  //Background color
  MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);

  //Title color
  MainPage.SetValue(NavigationPage.BarTextColorProperty, Color.White);
}

选项2

public App()
{
  MainPage = new MainPageUser();      
}

public class MainPageUser : NavigationPage
{
  public MainPageUser((Page root) : base(root)
  {
     // Background color
     BarBackgroundColor = Color.Black;

     //Title color
     BarTextColor = Color.White;
  }
}

但是你现在可能已经注意到, iOS顶部的状态栏也是黑色 ,你需要在Info.plist文件中进行更改您的ios项目并打开它(右键单击并选择“打开方式”)使用xml编辑器和添加这些代码行

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

答案 1 :(得分:15)

我相信你最好写一些特定于平台的代码:

适用于Android:

在Droid项目的MainActivity.cs上,紧跟在

之后
LoadApplication(new App());
覆盖OnCreate方法的

,添加:

Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0));

像这样:

protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);            
            LoadApplication(new App());
            Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0)); //here
        }

答案 2 :(得分:6)

Android的另一个选项:更改文件\Resources\values\styles.xml(Android项目)中的颜色。

<item name="colorPrimaryDark">#00FF00</item>

答案 3 :(得分:2)

也许我不理解这个问题,但我希望这会有所帮助。

在搜索了一下,试图找出如何更改iPhoneX状态栏颜色(缺口后面的位)之后,我发现它会根据根BackroundColor属性自动设置自己{ {1}}。

所以在Xaml中它就像这样简单:

ContentPage

我基本上使用其中一个答案中描述的方法:https://stackoverflow.com/a/46199029/960691,但是通过为您提供一个我专注于您的个人问题的代码片段来修改它(至少我认为! )

答案 4 :(得分:1)

在最新版本的Xamarin上,您不再需要粗略的插件,而是可以在Android上执行以下操作:

var androidColor = color.ToAndroid();               
Xamarin.Essentials.Platform.CurrentActivity.Window.SetStatusBarColor(androidColor);

因此是Android中完整的依赖示例:

using System;
using Android.OS;
using WikiSpiv.Droid.Extras;
using WikiSpiv.Extras;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: Dependency(typeof(Statusbar))]
namespace WikiSpiv.Droid.Extras
{
    public class Statusbar : IStatusBarPlatformSpecific
    {
        public Statusbar()
        {
        }

        public void SetStatusBarColor(Color color)
        {
            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            {
                var androidColor = color.ToAndroid();
                Xamarin.Essentials.Platform.CurrentActivity.Window.SetStatusBarColor(androidColor);
            }
        }
    }

}

表单:

using System;
using Xamarin.Forms;

namespace WikiSpiv.Extras
{
    public interface IStatusBarPlatformSpecific
    {
        public void SetStatusBarColor(Color color);
    }
}

它可以这样称呼:

var statusbar = DependencyService.Get<IStatusBarPlatformSpecific>();
statusbar.SetStatusBarColor(Color.Green);

答案 5 :(得分:0)

使用这种方法,您可以在每个页面上更改它。

Application.Current.MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);

答案 6 :(得分:0)

这对我有用。

在App.xaml中

 <Color x:Key="navBarRed">#AA0000</Color>
 <Color x:Key="navBarBlue">#F4721C</Color>
 <Color x:Key="navBarColour">#F4721C</Color>
 <Style TargetType="NavigationPage">
     <Setter Property="BarBackgroundColor" Value="{DynamicResource navBarColour}"/>
 </Style>

然后,当您要更改颜色时:

if (Condition == true)
    App.Current.Resources["navBarColour"] = App.Current.Resources["navBarBlue"];
else
    App.Current.Resources["navBarColour"] = App.Current.Resources["navBarRed"];

答案 7 :(得分:0)

第一步,在共享类中添加接口

    public interface IStatusBarColor
        {
            void changestatuscolor(string color);
        }

第 2 步:在主要活动上注入依赖并实现接口

[assembly: Dependency(typeof(ETCrewReport.Droid.MainActivity))]
 public class MainActivity : FormsAppCompatActivity, IStatusBarColor  
    {
      ......
      ...
      public static Context context;

        protected override void OnCreate(Bundle bundle)
        {
        }
 public void changestatuscolor(string color)
        {
            try
            {
                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    var c = MainActivity.context as FormsAppCompatActivity;
                    c?.RunOnUiThread(() => c.Window.SetStatusBarColor(Android.Graphics.Color.ParseColor(color)));
                }
            }
            catch (Exception ex)
            {
                 
            }

    }
    

步骤 3. 获取 OnAppearing 方法所需的 xaml.cs 文件中的依赖项

protected async override void OnAppearing()
        {
            try
            {
                DependencyService.Get<IStatusBarColor>().changestatuscolor(Color.Black.ToHex());
            }
            catch (Exception ex)
            {
                throw;
            }
        }