В Xamarin.Forms-Изменение Цвета Строки Состояния

Я ищу, но не могу найти, можно ли изменить цвет строки состояния для каждой платформы из моего портативного кода? (ибо Android, iOS & WinPhone 8.1)

public App()
{
    // Change the StatusBar color
    MainPage = new MainPageUser();
}

5 ответов


это довольно легко на самом деле.

быстрый ответ

просто добавьте эту строку

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

или если вы наследуете от NavigationPage, вы можете сделать это с помощью

BarBackgroundColor = Color.Black;

подробный ответ!--9--> У вас есть два варианта. Давайте посмотрим на них.

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 сверху также черная и что вам нужно изменить в инфо.plist-файл в вашем проекте ios и откройте его (щелкните правой кнопкой мыши и выберите "Открыть с помощью") с помощью редактора xml и добавить эти строки кода

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

Я считаю, что вам было бы лучше написать немного кода для конкретной платформы:

Для Android:

В класса MainActivity.cs на проекте Droid, сразу после

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
        }

еще один вариант для Android: изменение цвета в файле \Resources\values\styles.xml (проект Android).

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

может быть, я не понимаю вопрос, но я надеюсь, что это поможет.

после поиска вокруг совсем немного, пытаясь узнать, как изменить цвет строки состояния iPhoneX (бит за выемкой), я узнал, что он автоматически устанавливает себя на основе BackroundColorсвойства корня ContentPage.

поэтому в Xaml это так просто:

   <ContentPage.BackgroundColor>
        <OnPlatform x:TypeArguments="Color"
                    iOS="Navy"
                    Android="Yellow"
                    />
    </ContentPage.BackgroundColor>

Я в основном используя подход, описанный в одном из ответов здесь: https://stackoverflow.com/a/46199029/960691, но немного изменив его, предоставив вам фрагмент кода, который я сосредоточил на вашем индивидуальном вопросе (по крайней мере, я думаю!)


используя этот подход, вы можете изменить его на каждой странице.

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