使用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); }
刚刚用ActionBarActivity
testing过,它工作正常。
注意:如果您的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提到。