Xamarin.Forms - 更改StatusBar颜色

Emi*_*m23 17 statusbar xamarin.forms

我搜索但是我无法找到是否可以从我的便携式代码中更改每个平台的StatusBar颜色?(用于Android, iOS & WinPhone 8.1)

public App()
{
    // Change the StatusBar color
    MainPage = new MainPageUser();
}
Run Code Online (Sandbox Code Playgroud)

lem*_*mur 23

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

对于Android:

在Droid项目的MainActivity.cs之后

LoadApplication(new App());
Run Code Online (Sandbox Code Playgroud)

重写OnCreate方法,添加:

Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0));
Run Code Online (Sandbox Code Playgroud)

像这样:

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
        }
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案。其余的需要更改导航栏的颜色-有时没有导航栏。注意`SetStatusBarColor`仅在[API级别21及更高](https://developer.android.com/reference/android/view/Window.html#setStatusBarColor(int))中受支持。因此,我们应该在调用SetStatusBarColor之前进行检查。如果(Android.OS.Build.VERSION.SdkInt> = BuildVersionCodes.Lollipop){Window.SetStatusBarColor(...);}` (3认同)

Stu*_*rla 18

这真的很容易.

快速回答

只需添加此行即可

MainPage.SetValue(NavigationPage.BarBackgroundColorProperty, Color.Black);
Run Code Online (Sandbox Code Playgroud)

或者,如果您从NavigationPage继承,则可以执行此操作

BarBackgroundColor = Color.Black;
Run Code Online (Sandbox Code Playgroud)

详细解答 您有两种选择.让我们看看他们.

选项1

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

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

  //Title color
  MainPage.SetValue(NavigationPage.BarTextColorProperty, Color.White);
}
Run Code Online (Sandbox Code Playgroud)

选项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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

  • 这是针对**导航栏**,而不是状态栏,这就是问题所在,所以我很惊讶地看到它被标记为接受的答案...但是要堆积导航栏...最简单的非-平台特定的方法是在 App.xaml 中设置隐式样式: &lt;Style TargetType="{x:Type NavigationPage}"&gt; &lt;Setter Property="BarBackgroundColor" Value="Black" /&gt; &lt;Setter Property="BarTextColor “值=“白色”/&gt; &lt;/样式&gt; (3认同)
  • AFAIK,仅在*如果*您使用 NavigationBar 时有效。当 NavigationBar=false 时,这不起作用(在我的情况下)。 (2认同)
  • 如果您既不使用 NavigationPage 也不使用 NavigationBar 怎么办?一世 (2认同)

Ton*_*tio 9

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

<item name="colorPrimaryDark">#00FF00</item>
Run Code Online (Sandbox Code Playgroud)

  • 这是在Android中设置状态栏颜色的唯一方法。以我的经验,在Xamarin Forms中无法以跨平台的方式进行此操作。我很高兴被证明是错误的。 (3认同)
  • 这是比添加语句更优选的方法: Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0)); 来自之前的答案,因为在这种情况下,状态栏在加载时立即根据需要着色,而在之前的答案中,它在开始时默认着色,然后重新绘制。如果您的活动加载时间不是即时的,这可能会非常明显。 (2认同)