【问题标题】:How to change the color of the status bar in Android?如何更改Android中状态栏的颜色?
【发布时间】:2016-09-06 06:17:55
【问题描述】:

我想在 Android Studio 中更改高亮条的颜色:

我该怎么做?

【问题讨论】:

  • 你说的是状态栏还是手机底部栏还是别的什么?请更具体
  • @KDeogharkar 图片说明了一切。我不知道术语。
  • 哦,我看不到它。 imgur 是我的障碍。我的错误

标签: android


【解决方案1】:

您可以通过在 styles.xml 中设置您用于应用的样式的 android:statusBarColorandroid:colorPrimaryDark 属性来更改它。

android:statusBarColor默认继承android:colorPrimaryDark的值)

例如(因为我们在这里使用 AppCompat 主题,所以省略了 android 命名空间):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/your_custom_color</item>
</style>

在 API 级别 21+ 上,您还可以使用代码中的 Window.setStatusBarColor() 方法。

来自其docs

要使其生效,窗口必须正在绘制系统栏 背景与 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSWindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 不得设置。 如果颜色不透明,请考虑设置 View.SYSTEM_UI_FLAG_LAYOUT_STABLEView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.

要设置这些标志,您可以执行以下操作:

// getWindow() is a method of Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

【讨论】:

    【解决方案2】:

    状态栏是操作系统拥有的系统窗口。 在 5.0 之前的 Android 设备上,应用程序无权更改其颜色,因此 AppCompat 库不支持旧平台版本。 AppCompat 可以做的最好的事情是为应用程序中的 ActionBar 和其他常见 UI 小部件提供着色支持。

    在 5.0 之后的 Android 设备上, 更改状态栏的颜色还需要在 Window 上设置两个附加标志;您需要添加FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 标志并清除FLAG_TRANSLUCENT_STATUS 标志。

    Window window = activity.getWindow();
    
    // clear FLAG_TRANSLUCENT_STATUS flag:
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    
    // finally change the color
    window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));
    

    【讨论】:

      【解决方案3】:

      将状态栏颜色添加到您的样式并完成

      <item name="android:statusBarColor">@color/black</item>
      

      这适用于 API 级别 21+

      【讨论】:

        【解决方案4】:

        你也可以在主Activity中添加这几行代码

        if (Build.VERSION.SDK_INT >= 21)
        {
        getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.statusbar)); //status bar or the time bar at the top (see example image1)
        
        getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dark_nav)); // Navigation bar the soft bottom of some phones like nexus and some Samsung note series  (see example image2)
        }
        

        示例 image1 setStatusBarColor

        示例 image2 setNavigationBarColor

        【讨论】:

          【解决方案5】:

          更改状态栏颜色仅适用于棒棒糖上方的 android

          1.您可以通过此行以编程方式更改状态栏颜色:

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.your_color));
          }
          

          2.你可以用平滑的过渡动画做到这一点:

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
              int startColor = getWindow().getStatusBarColor();
              int endColor = ContextCompat.getColor(context, R.color.your_color);
              ObjectAnimator.ofArgb(getWindow(), "statusBarColor", startColor, endColor).start();
          }
          

          3.或者你可以在 values/styles.xml 文件中将它添加到你的主题样式中。 item colorPrimaryDark 将用于您的应用状态栏颜色

          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          

          【讨论】:

            【解决方案6】:
            <item name="colorPrimaryDark">@color/your_color</item> 
            

            将仅在 Lollipop 和大于 Lollipop(API) 设备中可见。 附言您需要将 Theme.AppCompat 作为您的基本/主要主题

            【讨论】:

              【解决方案7】:

              如果你使用自定义 actionBar 那么你可以试试这个。

              <style name="AppThemeBrowser" parent="Theme.AppCompat.NoActionBar">
                  <item name="android:statusBarColor">@color/colorPrimaryDark</item>
                  <item name="colorPrimary">@color/colorPrimary</item>
                  <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
              </style>
              

              或者如果你使用AppTheme actionBar的话,你可以试试这个

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

              希望这会对您有所帮助。

              快乐编码

              【讨论】:

                【解决方案8】:

                像往常一样在主题中更改它,例如不使用 jetpack compose。 主题和主题之夜中的 colorPrimary 和 colorPrimaryVariant。

                <style name="Theme.AndroidDevChallenge" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
                    <!-- Primary brand color. -->
                    <item name="colorPrimary">@color/SweetRed</item>
                    <item name="colorPrimaryVariant">@color/SweetRedDarker</item>
                    <item name="colorOnPrimary">@color/black</item>
                    <!-- Secondary brand color. -->
                    <item name="colorSecondary">@color/teal_200</item>
                    <item name="colorSecondaryVariant">@color/teal_200</item>
                    <item name="colorOnSecondary">@color/black</item>
                    <!-- Status bar color. -->
                    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
                    <!-- Customize your theme here. -->
                </style>
                

                【讨论】:

                  【解决方案9】:

                  右键单击res文件夹中的values文件夹中的主题文件夹:|

                  <!--write something like this in the color.xml, with your own color code-->
                  
                  <color name="status_bar_light">#FFea80fc</color>
                  <color name="status_bar_dark">#FF263238</color>
                  

                  在themes.xml中,把colorPrimaryVariant改成这个

                  <item name="colorPrimaryVariant">@color/status_bar_light</item>
                  

                  在 theme.xml(night) 中添加这个

                  <item name="colorPrimaryVariant">@color/status_bar_dark</item>
                  

                  你有它,快乐编码;)

                  【讨论】:

                    【解决方案10】:

                    要更改特定活动的颜色,只需使用

                    app:statusBarBackground="@color/colorPrimaryDark"

                    或任何其他颜色值代替父布局标记中所需活动的邮件布局文件中的@color/colorPrimaryDark,例如在我的情况下默认为CoordinatorLayout,它是所有的父级(将所有其他布局保留在此CoordinatorLayout 否则可能不起作用)

                    希望这会有所帮助,虽然我不完全确定如何,但这对我来说是有效的。

                    【讨论】:

                      【解决方案11】:

                      注意:- api 级别 19 或 21 及以上 api 级别支持状态栏颜色。
                      请查看此链接:change status bar color

                      【讨论】:

                        猜你喜欢
                        • 2016-07-06
                        • 2014-04-07
                        • 1970-01-01
                        • 1970-01-01
                        • 2015-05-09
                        • 2016-09-08
                        • 2020-03-07
                        • 2015-04-13
                        相关资源
                        最近更新 更多