Solución:
Creo que sería mejor que escribiera un poco de código específico de la plataforma:
Para Android:
En su MainActivity.cs en el proyecto Droid, justo después
LoadApplication(new App());
del método OnCreate anulado, agregue:
Window.SetStatusBarColor(Android.Graphics.Color.Argb(255, 0, 0, 0));
Al igual que:
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
}
Regresaré a esta respuesta años después para solucionarlo porque mi respuesta había sido incorrecta a pesar de que había sido aceptada como la respuesta correcta. Ahora lo he arreglado.
Había leído mal la pregunta para querer cambiar la barra de navegación o que funcionaba de manera diferente en Android en ese momento.
Creo que al menos esta es una respuesta mucho mejor y debería ser una mejor ayuda para cambiar el color de la barra de navegación en Android e iOS.
Agregue este código a su proyecto Xamarin.Forms
public interface IStatusBarPlatformSpecific
{
void SetStatusBarColor(Color color);
}
agregue esta clase a su proyecto de Android
[assembly: Dependency(typeof(MyDemo.Droid.CustomRenderers.Statusbar))]
namespace MyDemo.Droid.CustomRenderers
{
public class Statusbar : IStatusBarPlatformSpecific
{
public Statusbar()
{
}
public void SetStatusBarColor(Color color)
{
// The SetStatusBarcolor is new since API 21
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
var androidColor = color.AddLuminosity(-0.1).ToAndroid();
//Just use the plugin
CrossCurrentActivity.Current.Activity.Window.SetStatusBarColor(androidColor);
}
else
{
// Here you will just have to set your
// color in styles.xml file as shown below.
}
}
}
}
Agregue este CurrentActivityPlugin a sus proyectos
Ahora puede cambiar el color en su proyecto de formularios de esta manera
var statusbar = DependencyService.Get<IStatusBarPlatformSpecific>();
statusbar.SetStatusBarColor(Color.Green);
Nota la declaración else anterior. Si está utilizando una versión de compilación anterior a 21, deberá codificar su color en styles.xml en su proyecto de Android de esta manera
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="MainTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:statusBarColor">#544054</item>
</style>
</resources>
Para iOS es similar
agregue esto a su Info.plist (más documentos aquí)
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
y agregue este código a su método SetStatusBarColor en la versión iOS de la clase StatusBar
UIView statusBar = UIApplication.SharedApplication.ValueForKey(
new NSString("statusBar")) as UIView;
if (statusBar != null && statusBar.RespondsToSelector(
new ObjCRuntime.Selector("setBackgroundColor:")))
{
// change to your desired color
statusBar.BackgroundColor = Color.FromHex("#7f6550").ToUIColor();
}
Escribí una publicación de blog más detallada sobre cómo establecer el color de la barra de estado de Xamarin.Forms si alguien está interesado. Solo habla de Android e iOS, pero debería darte una idea de qué hacer con otras plataformas.
Otra opción para Android: cambiar el color del archivo Resourcesvaluesstyles.xml
(Proyecto de Android).
<item name="colorPrimaryDark">#00FF00</item>