使用AppCompat ActionBarActivity更改状态栏的颜色

在我的一个活动中,我使用Palette更改工具栏的颜色,但在5.0设备上使用ActionBarActivity status bar颜色是我的活动主题中的colorPrimaryDark的颜色,所以我有2非常不同的颜色,它看起来不好。

我意识到,在5.0中可以使用Window.setStatusBarColor()ActionBarActivity没有这个。

所以我的问题是在5.0如何更改状态栏的颜色与ActionBarActivity

我不确定我是否理解这个问题。

我想要以编程方式更改状态栏颜色(并提供设备具有Android 5.0),那么您可以使用Window.setStatusBarColor() 。 活动是从Activity还是ActionBarActivity派生出来的,都没有什么区别。

试试看:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.BLUE); } 

刚刚用ActionBarActivitytesting过,它工作正常。


注意:如果您的values-v21样式文件已经设置,那么通过编程设置FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS标志是不必要的:

  <item name="android:windowDrawsSystemBarBackgrounds">true</item> 

有更改状态栏颜色的各种方法。

1)使用styles.xml。 你可以使用android:statusBarColor属性来完成这个简单而静态的方法。

注意:您也可以在Material主题中使用此属性。

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="AppTheme.Base"> <item name="android:statusBarColor">@android:color/transparent</item> </style> </resources> 

2)可以使用Window类中的setStatusBarColor(int)方法dynamic地完成它。 但请记住,此方法仅适用于API 21或更高版本。 所以一定要检查一下,否则你的应用肯定会在较低的设备上崩溃。

这是这个方法的一个工作例子。

 if (Build.VERSION.SDK_INT >= 21) { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(getResources().getColor(R.color.primaryDark)); } 

其中primaryDark是我在我的应用程序中使用的原色的700色调。 你可以在colors.xml文件中定义这个颜色。

请试试看,如果您有任何问题,请告诉我。 希望能帮助到你。

我不认为状态栏颜色已经在AppCompat中实现。 这些是可用的属性:

  <!-- ============= --> <!-- Color palette --> <!-- ============= --> <!-- The primary branding color for the app. By default, this is the color applied to the action bar background. --> <attr name="colorPrimary" format="color" /> <!-- Dark variant of the primary branding color. By default, this is the color applied to the status bar (via statusBarColor) and navigation bar (via navigationBarColor). --> <attr name="colorPrimaryDark" format="color" /> <!-- Bright complement to the primary branding color. By default, this is the color applied to framework controls (via colorControlActivated). --> <attr name="colorAccent" format="color" /> <!-- The color applied to framework controls in their normal state. --> <attr name="colorControlNormal" format="color" /> <!-- The color applied to framework controls in their activated (ex. checked) state. --> <attr name="colorControlActivated" format="color" /> <!-- The color applied to framework control highlights (ex. ripples, list selectors). --> <attr name="colorControlHighlight" format="color" /> <!-- The color applied to framework buttons in their normal state. --> <attr name="colorButtonNormal" format="color" /> <!-- The color applied to framework switch thumbs in their normal state. --> <attr name="colorSwitchThumbNormal" format="color" /> 

(从\ sdk \ extras \ android \ support \ v7 \ appcompat \ res \ values \ attrs.xml

试试这个,我用这个,它用v21很好用。

 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimaryDark">@color/blue</item> </style> 

感谢上面的答案,在这些人的帮助下,经过一定的研发xamarin.android MVVMCross申请,下面的工作

在方法OnCreate中为活动指定的标志

 protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); } 

对于每个MvxActivity,主题如下所述

  [Activity( LaunchMode = LaunchMode.SingleTop, ScreenOrientation = ScreenOrientation.Portrait, Theme = "@style/Theme.Splash", Name = "MyView" )] 

我的SplashStyle.xml如下所示

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:statusBarColor">@color/app_red</item> <item name="android:colorPrimaryDark">@color/app_red</item> </style> </resources> 

我有V7 appcompact提到。