web-dev-qa-db-fra.com

Xamarin.Forms - Changer la couleur de la barre d'état

Je cherche mais je ne trouve pas s'il est possible de changer la couleur de la barre d'état pour chaque plate-forme, à partir de mon code portable. (pour Android, iOS & WinPhone 8.1)

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

C'est assez facile, vraiment.

La réponse rapide

Il suffit d'ajouter cette ligne

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

Ou si vous héritez d'une NavigationPage, vous pouvez le faire avec

BarBackgroundColor = Color.Black;

Réponse détaillée Vous avez deux options. Permet de les regarder.

Option 1

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

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

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

Option 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;
  }
}

Mais comme vous le remarquerez probablement maintenant, c’estque la barre d’état dans iOS du haut est également noireet que vous devez modifier le fichier Info.plist de votre projet ios et l’ouvrir et choisissez "ouvrir avec") avec l'éditeur xml et ajoutez ces lignes de code

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

Je pense que vous feriez mieux d'écrire un peu de code spécifique à la plateforme:

Pour Android:

Sur votre MainActivity.cs sur le projet Droid, juste après

LoadApplication(new App());

de la méthode OnCreate remplacée, ajoutez:

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

Ainsi:

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
        }
11
mtsfaria

Autre option pour Android: changez la couleur dans le fichier \Resources\values\styles.xml (projet Android).

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

Peut-être que je ne comprends pas la question, mais j'espère que cela aidera.

Après avoir un peu cherché à savoir comment changer la couleur de la barre d'état iPhoneX (le bit derrière l'encoche), j'ai découvert qu'il se définit automatiquement en fonction de la propriété BackroundColor de la racine ContentPage.

Donc, dans Xaml, c'est aussi simple que cela:

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

J'utilise essentiellement l'approche décrite dans l'une des réponses suivantes: https://stackoverflow.com/a/46199029/960691 , mais je la modifie un peu en vous donnant un extrait de code sur lequel je me suis concentré. votre question individuelle (du moins je pense!) 

2
Le Mot Juiced

En utilisant cette approche, vous pouvez le changer sur chaque page.

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