Xamarin表单:自定义Android Material样式状态栏颜色

时间:2016-04-17 13:36:50

标签: xamarin material-design xamarin.forms statusbar android-theme

我已使用以下代码在我的Xamarin.Forms项目中启用了Material主题,但在Android(Lollipop和Marshmallow)上,顶部状态栏(时钟,信号,电池等所在的位置)不会出现这种情况。改变。它始终是黑色的。 我已经阅读过很多论坛和博客,尝试了很多组合,但我无法按照自己的意愿获得此状态栏。

MainActivity.cs

[Activity(Theme = "@style/MyTheme", Label = "MyApp", Icon = "@drawable/AppIcon", ScreenOrientation = ScreenOrientation.Portrait, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

值-V21 / style.xml

<resources>
  <style name="MyTheme.Splash" parent="android:Theme.Material.Light">    
    <item name="android:windowBackground">@drawable/SplashScreen</item>
    <item name="android:windowNoTitle">true</item>
  </style>
  <style name="MyTheme" parent="android:Theme.Material.Light">
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    <item name="android:colorPrimary">@color/Brand</item>
    <item name="android:textColorPrimary">@color/White</item>
    <item name="android:statusBarColor">@color/BrandDark</item>
    <item name="android:colorPrimaryDark">@color/BrandDark</item>
    <item name="android:colorAccent">@color/Brand</item>
    <item name="android:textColor">@color/Brand</item>    
  </style>  
</resources>

值/ colors.xml

<resources>  
  <color name="SplashBackground">#f78b2b</color>
  <color name="Brand">#f78b2b</color>
  <color name="BrandDark">#e47108</color>
  <color name="White">#ffffff</color>
</resources>

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

您应该关注this Tutorial才能获得成功。

基本上,您必须使用FormsAppCompatActivity代替FormsApplicationActivityTheme.AppCompat.Light.NoActionBar而不是Theme.Material.Light

答案 1 :(得分:4)

其他解决方案最简单,在MainActivity.cs的OnCreate方法中添加:

Window window = this.Window; window.ClearFlags(WindowManagerFlags.TranslucentStatus); window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); window.SetStatusBarColor(Android.Graphics.Color.Rgb(116, 181, 13));

答案 2 :(得分:1)

来自等效Java版本的翻译:

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
    // clear FLAG_TRANSLUCENT_STATUS flag:
    Window.ClearFlags(Android.Views.WindowManagerFlags.TranslucentStatus);

    //Window.ClearFlags(WindowManager.Pa WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    Window.AddFlags(Android.Views.WindowManagerFlags.DrawsSystemBarBackgrounds);

    // finally change the color
    Window.SetStatusBarColor(new Color(ContextCompat.GetColor(this, Resource.Color.colorPrimaryDark)));
}

答案 3 :(得分:0)

我和接受的答案一样。它正在开展我们的一个项目而不是另一个项目。

我还没有看到这个问题的解决方案,所以我是第一个。

如果您已在assemblyInfo.cs中声明了您的使用权限而不是清单,则会导致状态栏无法按预期工作。

即使您通过为每项活动单独设置它来使其工作,但在转换到活动时它仍然不起作用。因此,唯一的方法是将uses-permission语句移动到清单。

希望我能帮助别人!