Xamarin forms:自定义AndroidMaterial样式状态栏颜色
Xamarin forms: Customize Android Material style status bar color
我已经使用以下代码在我的 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)]
values-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>
values/colors.xml
<resources>
<color name="SplashBackground">#f78b2b</color>
<color name="Brand">#f78b2b</color>
<color name="BrandDark">#e47108</color>
<color name="White">#ffffff</color>
</resources>
感谢您的帮助!
您应该遵循 this Tutorial 以获得成功。
基本上你必须使用 FormsAppCompatActivity
而不是 FormsApplicationActivity
和 Theme.AppCompat.Light.NoActionBar
而不是 Theme.Material.Light
。
其他解决方法最简单,在MainActivity.cs的OnCreate方法中添加:
Window window = this.Window;
window.ClearFlags(WindowManagerFlags.TranslucentStatus);
window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
window.SetStatusBarColor(Android.Graphics.Color.Rgb(116, 181, 13));
来自等效 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)));
}
我和接受的答案一样。它正在处理我们的一个项目,而不是另一个项目。
我还没有看到这个特定问题的解决方案,所以我是第一个。
如果您在 assemblyInfo.cs 而不是清单中声明了您的使用权限,将导致状态栏无法按预期工作。
即使您通过为每个 activity 单独设置它来使其工作,当您过渡到活动时它仍然不起作用。所以唯一的方法是将使用许可声明移动到清单中。
希望我能帮到别人!
我已经使用以下代码在我的 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)]
values-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>
values/colors.xml
<resources>
<color name="SplashBackground">#f78b2b</color>
<color name="Brand">#f78b2b</color>
<color name="BrandDark">#e47108</color>
<color name="White">#ffffff</color>
</resources>
感谢您的帮助!
您应该遵循 this Tutorial 以获得成功。
基本上你必须使用 FormsAppCompatActivity
而不是 FormsApplicationActivity
和 Theme.AppCompat.Light.NoActionBar
而不是 Theme.Material.Light
。
其他解决方法最简单,在MainActivity.cs的OnCreate方法中添加:
Window window = this.Window;
window.ClearFlags(WindowManagerFlags.TranslucentStatus);
window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
window.SetStatusBarColor(Android.Graphics.Color.Rgb(116, 181, 13));
来自等效 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)));
}
我和接受的答案一样。它正在处理我们的一个项目,而不是另一个项目。
我还没有看到这个特定问题的解决方案,所以我是第一个。
如果您在 assemblyInfo.cs 而不是清单中声明了您的使用权限,将导致状态栏无法按预期工作。
即使您通过为每个 activity 单独设置它来使其工作,当您过渡到活动时它仍然不起作用。所以唯一的方法是将使用许可声明移动到清单中。
希望我能帮到别人!