如何更改状态栏颜色以匹配棒棒糖中的应用程序? 产品

在新的棒棒糖更新中,我注意到,使用本地Google应用程序,状态栏的颜色将更改为与您正在运行的应用程序的操作栏相匹配。 我看到它也是在Twitter上的应用程序,所以我猜这不是完全可以做到的Google。

有没有人知道如何做到这一点,如果可能的话?

要更改状态栏颜色,请使用setStatusBarColor(int color) 。 根据javadoc,我们还需要在窗口上设置一些标志。

工作代码片段:

Window window = activity.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color)); 

请记住, 根据材料devise指南,状态栏颜色和操作栏颜色应该是不同的:

  • ActionBar应该使用主500颜色
  • StatusBar应该使用主要的700颜色

看下面的截图:

在这里输入图像描述

只需在styles.xml中添加它即可。 colorPrimary用于操作栏,colorPrimaryDark用于状态栏。

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:colorPrimary">@color/primary</item> <item name="android:colorPrimaryDark">@color/primary_dark</item> </style> 

这幅来自android开发者的照片解释了更多关于色彩的东西。 你可以阅读更多关于这个链接 。

在这里输入图像描述

另一种设置状态栏颜色的方法是通过style.xml

为此,请在res / values-v21文件夹下创build一个style.xml文件,其中包含以下内容:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="android:Theme.Material"> <!-- darker variant for the status bar and contextual app bars --> <item name="android:colorPrimaryDark">@color/blue_dark</item> </style> </resources> 

编辑:正如在评论中指出的,当使用AppCompat的代码是不同的。 在文件res / values / style.xml中改用:

 <style name="Theme.MyTheme" parent="Theme.AppCompat.Light"> <!-- Set AppCompat's color theming attrs --> <item name="colorPrimary">@color/my_awesome_red</item> <item name="colorPrimaryDark">@color/my_awesome_darker_red</item> <!-- Other attributes --> </style> 

要设置状态栏颜色,请在res / values-v21文件夹下创build具有以下内容的style.xml文件:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppBaseTheme" parent="AppTheme"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@color/blue</item> </style> </resources> 

在Android的前棒棒糖设备,你可以从SystemBarTintManager如果你正在使用android studio只需添加Systembartint lib在你的gradle文件。

 dependencies { compile 'com.readystatesoftware.systembartint:systembartint:1.0.3' ... } 

然后在你的活动

 // create manager instance after the content view is set SystemBarTintManager mTintManager = new SystemBarTintManager(this); // enable status bar tint mTintManager.setStatusBarTintEnabled(true); mTintManager.setTintColor(getResources().getColor(R.color.blue)); 

如果您使用两种样式,请以v21的样式添加此行。

  <item name="android:statusBarColor">#43434f</item> 

另外,如果你想为不同的活动( 片段 )使用不同的status-bar颜色,你可以通过下面的步骤(在API 21及更高版本上工作)完成:

首先创buildvalues21/style.xml ,并input以下代码:

  <style name="AIO" parent="AIOBase"> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowContentTransitions">true</item> </style> 

然后在你的values/style.xml定义White | Dark主题,如下所示:

  <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/color_primary</item> <item name="colorPrimaryDark">@color/color_primary_dark</item> <item name="colorAccent">@color/color_accent</item> <item name="android:textColorPrimary">@android:color/black</item> <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark </item> <item name="android:textColor">@color/gray_darkest</item> <item name="android:windowBackground">@color/default_bg</item> <item name="android:colorBackground">@color/default_bg</item> </style> <style name="AIO" parent="AIOBase" /> <style name="AIO.Dark" parent="AIOBase"> <item name="android:statusBarColor" tools:targetApi="lollipop">#171717 </item> </style> <style name="AIO.White" parent="AIOBase"> <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd </item> </style> 

另外不要忘记在manifest.xml应用主题。