代码之家  ›  专栏  ›  技术社区  ›  codercat Piyush Dubey

如何在Android中更改状态栏颜色?

  •  547
  • codercat Piyush Dubey  · 技术社区  · 10 年前

    首先,它不像中那样是重复的 How to change the background color of android status bar

    如何更改状态栏的颜色,该颜色应与导航栏中的颜色相同。

    我希望状态栏颜色与导航栏颜色相同

    enter image description here

    29 回复  |  直到 10 年前
        1
  •  778
  •   dognose    3 年前

    Android 5.0棒棒糖推出了材质设计主题,该主题基于 colorPrimaryDark 主题的价值。

    realdognose注意:使用Material Design库 colorPrimaryVariant

    由于从版本21开始的库支持-v7-appcompat,这在设备预棒棒糖上受支持。 Blogpost about support appcompat v21 from Chris Banes

    enter image description here

    Read more about the Material Theme on the official Android Developers website

        2
  •  432
  •   Black    5 年前

    更新:

    棒棒糖:

    public abstract void setStatusBarColor (int color)
    

    在API级别21中添加

    Android棒棒糖带来了改变应用程序中状态栏颜色的功能,以获得更沉浸的用户体验,并与谷歌保持一致 Material Design Guidelines .

    以下是如何使用新的 window.setStatusBarColor 中引入的方法 API level 21 .

    更改状态栏的颜色还需要在窗口上设置两个附加标志;您需要添加 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 标记并清除 FLAG_TRANSLUCENT_STATUS 旗帜

    工作代码:

    import android.view.Window;
    

    ...

    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(ContextCompat.getColor(activity,R.color.my_statusbar_color));
    

    官方开发商参考: setStatusBarColor(int)

    例子: material-design-everywhere

    Chris Banes Blog- appcompat v21: material design for pre-Lollipop devices!

    enter image description here

    这个 transitionName 对于视图背景 android:status:background .

        3
  •  285
  •   double-beep hudson solomon    2 年前

    放置这是您的 values-v21/styles.xml ,要在棒棒糖上启用此功能:

    <resources>
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light">
            <item name="colorPrimary">@color/color_primary</item>
            <item name="colorPrimaryDark">@color/color_secondary</item>
            <item name="colorAccent">@color/color_accent</item>
            <item name="android:statusBarColor">@color/color_primary</item>
        </style>
    </resources>
    
        4
  •  60
  •   Faisal Shaikh    4 年前

    对于Java开发人员:

    正如@Niels所说,您必须在values-v21/styles.xml中放置:

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

    但添加 tools:targetApi="lollipop" 如果您想要单一styles.xml,例如:

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

    Kotlin开发商:

    window.statusBarColor = ContextCompat.getColor(this, R.color.color_name)
    
        5
  •  50
  •   itzhar    10 年前

    在没有任何库的情况下,这是非常简单的方法: 如果在kitkat下不支持OS版本,则不会发生任何事情。 我执行以下步骤:

    1. 在我的xml中,我将此视图添加到顶部:
    <View
            android:id="@+id/statusBarBackground"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    

    然后我做了这个方法:

     public void setStatusBarColor(View statusBar,int color){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
               Window w = getWindow();
               w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
               //status bar height
               int actionBarHeight = getActionBarHeight();
               int statusBarHeight = getStatusBarHeight();
               //action bar height
               statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
               statusBar.setBackgroundColor(color);
         }
    }
    

    此外,您还需要这两种方法来获得动作Bar&状态栏高度:

    public int getActionBarHeight() {
        int actionBarHeight = 0;
        TypedValue tv = new TypedValue();
        if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
        {
           actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
        }
        return actionBarHeight;
    }
    
    public int getStatusBarHeight() {
        int result = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
    

    那么您只需要这一行来设置状态栏颜色:

    setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));
    
        6
  •  46
  •   sunadorer    5 年前

    您可以使用以下简单代码:

    Kotlin的一个衬垫:

    window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
    

    用Java&手动版本检查:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
    }
    
        7
  •  39
  •   Amin Keshavarzian    5 年前

    要更改上面lolipop的颜色,只需将其添加到styles.xml

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

    但请记住 ,如果您希望状态栏为浅色,也可以添加此行

    <item name="android:windowLightStatusBar">true</item>
    
        8
  •  32
  •   Şafak Gezer    3 年前

    嗯,Izhar的解决方案是可以的,但就我个人而言,我尽量避免出现这样的代码:

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    //Do what you need for this SDK
    };
    

    但我也不喜欢复制代码。在您的回答中,我必须在所有活动中添加如下代码行:

    setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));
    

    因此,我采用了Izhar的解决方案,并使用XML获得了相同的结果: 为StatusBar status_bar.xml创建布局

    <View xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="@dimen/statusBarHeight"
         android:background="@color/primaryColorDark"
         android:elevation="@dimen/statusBarElevation">
    

    请注意高度和高程属性,这些属性将设置为以下值:values-v19,values-v21。

    使用include、main_activity.xml将此布局添加到活动布局中:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/Black" >
    
    <include layout="@layout/status_bar"/>
    <include android:id="@+id/app_bar" layout="@layout/app_bar"/>
    //The rest of your layout       
    </RelativeLayout>
    

    对于工具栏,添加上边距属性:

    <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/actionBarSize"
    android:background="@color/primaryColor"
    app:theme="@style/MyCustomToolBarTheme"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
    android:elevation="@dimen/toolbarElevation"
    android:layout_marginTop="@dimen/appBarTopMargin"
    android:textDirection="ltr"
    android:layoutDirection="ltr">
    

    </android.support.v7.widget.Toolbar>

    在appTheme style-v19.xml和styles-v21.xml中,添加windowTranslucent属性:

    styles-v19.xml,v21:

    <resources>
    <item name="android:windowTranslucentStatus">true</item>
    </resources>
    

    最后,在dimens、dimens-v19和dimens-v21上,添加Toolbar topMargin的值和statusBarHeight的高度: 小于KitKat的dimens.xml:

    <resources>
    <dimen name="toolbarElevation">4dp</dimen>
    <dimen name="appBarTopMargin">0dp</dimen>
    <dimen name="statusBarHeight">0dp</dimen>
    </resources>
    

    状态栏高度始终为24dp 适用于KitKat及以上版本的dimens-v19.xml:

    <resources>
    <dimen name="statusBarHeight">24dp</dimen>
    <dimen name="appBarTopMargin">24dp</dimen>
    </resources>
    

    Lolipop的dimens-v21.xml,如果需要,只需添加高程:

    <resources>
    <dimen name="statusBarElevation">4dp</dimen>
    </resources>
    

    这是果冻KitKat和棒棒糖的结果:

    enter image description here

        9
  •  26
  •   lcompare    7 年前

    只需在中创建一个新主题 res/values/styles.xml 在此处更改状态栏的颜色“colorPrimaryDark”:

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

    并在中修改活动主题 AndroidManifest.xml 在下一个活动中,您可以通过选择原始主题将颜色改回原始颜色:

    <activity
        android:name=".LoginActivity"
        android:theme="@style/AppTheme.GrayStatusBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

    这就是你的 res/values/colors.xml 应该看起来像:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <color name="colorPrimary">#3F51B5</color>
        <color name="colorPrimaryDark">#303F9F</color>
        <color name="colorAccent">#c6d6f0</color>
        <color name="colorGray">#757575</color>
    </resources>
    
        10
  •  18
  •   sajad abbasi    7 年前

    您可以使用此功能更改状态栏的颜色。适用于android L意味着API 21和更高版本,需要颜色字符串,如 "#ffffff" .

    private void changeStatusBarColor(String color){
        if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.parseColor(color));
        }
    }
    
        11
  •  15
  •   DSoldo    7 年前

    我有这样的要求: 以编程方式更改状态栏颜色,使其保持透明 ,以允许导航抽屉绘制与父级状态栏重叠的自身。

    我不能使用API

    getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)
    

    如果您在堆栈溢出中选中此处,则该行代码之前的所有人都可以使用

    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    

    我能应付 颜色和透明度 状态栏如下:

    • Android4:你能做的不多,因为你无法从API管理状态栏颜色。。。唯一可以做的就是将状态栏设置为半透明,并在状态栏下移动UI的有色元素。要做到这一点,你需要玩

      android:fitsSystemWindows="false"
      

      在主布局中。这允许您在状态栏下绘制布局。然后,您需要在主布局的顶部使用一些填充。

    • Android 5及以上版本:您必须使用

      <item name="android:windowDrawsSystemBarBackgrounds">true</item>
      <item name="android:statusBarColor">@android:color/transparent</item>
      

      这允许导航抽屉与状态栏重叠。

      然后,要更改保持状态栏透明的颜色,必须使用

      drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))
      

      其中drawerLayout的定义如下

      <android.support.v4.widget.DrawerLayout
          android:id="@+id/drawer_layout"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:fitsSystemWindows="true">
      
        12
  •  15
  •   Mark    5 年前

    要更改状态栏的颜色,请转到 res/values-v21/styles.xml 和状态栏的颜色

    <resources>
        <!-- Base application theme. -->
        <style name="AppTheme" parent="Theme.AppCompat.Light">
            <item name="colorPrimary">@color/color_primary</item>
            <item name="colorPrimaryDark">@color/color_secondary</item>
            <item name="colorAccent">@color/color_accent</item>
            <item name="android:statusBarColor">#0000FF</item>
        </style>
    </resources>
    
        13
  •  11
  •   Nabin    4 年前

    如果您想以编程方式更改状态栏颜色(前提是设备具有Android 5.0)。 这是一个简单的改变方法 状态条形图颜色 来自任何 活动 和非常简单的方法 碎片 具有不同的状态栏颜色。

     /**
     * @param colorId id of color
     * @param isStatusBarFontDark Light or Dark color
     */
    fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val window = window
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            window.statusBarColor = ContextCompat.getColor(this, colorId)
            setSystemBarTheme(isStatusBarFontDark)
        }
    }
    
    /** Changes the System Bar Theme.  */
    @RequiresApi(api = Build.VERSION_CODES.M)
    private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
        // Fetch the current flags.
        val lFlags = window.decorView.systemUiVisibility
        // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
        window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    }
    
        14
  •  7
  •   Allan    7 年前

    如果您想在Android 4.4及以上版本上工作,请尝试此操作。我指的是Harpreet的回答和这个链接。 Android and the transparent status bar

    首先,在Activity的onCreate方法中调用setStatusBarColored方法(我将其放在一个util类中)。我在这里使用图像,您可以将其更改为使用颜色。

    public static void setStatusBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            int statusBarHeight = getStatusBarHeight(context);
    
            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
        }
    }
    
    public static int getStatusBarHeight(Activity context) {
        int result = 0;
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }
    

    之前: before

    之后: after

    状态栏的颜色已更改,但导航栏已被截断,因此我们需要在onCreate方法中设置导航栏的边距或偏移。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
            layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);
    
            this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
        }
    

    然后状态栏将如下所示。

    status bar

        15
  •  7
  •   PhilipS    6 年前

    将“值”中colors.xml中的colorPrimary编辑为状态栏所需的颜色。例如:

       <resources>
    <color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
    <color name="red">#FF0000</color>
    <color name="white">#FFFFFF</color>
    <color name="cream">#fffdd0</color>
    <color name="burgundy">#800000</color>
    

        16
  •  6
  •   user13327428 user13327428    4 年前

    解决方案非常简单,将以下行放入style.xml中

    对于暗模式:

    <item name="android:windowLightStatusBar">false</item>
    <item name="android:statusBarColor">@color/black</item>
    
        17
  •  6
  •   Rubaiyat Jahan Mumu Leo Dabus    3 年前

    只需在styles.xml文件中添加这些行

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- This is used for statusbar color. -->
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <!-- This is used for statusbar content color. If statusbarColor is light, use "true" otherwise use "false"-->
        <item name="android:windowLightStatusBar">false</item>
    </style>
    
        18
  •  4
  •   Harpreet    8 年前

    这就是我在KitKat工作的原因,并取得了很好的效果。

    public static void setTaskBarColored(Activity context) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
            {
                Window w = context.getWindow();
                w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                //status bar height
                int statusBarHeight = Utilities.getStatusBarHeight(context);
    
                View view = new View(context);
                view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
                view.getLayoutParams().height = statusBarHeight;
                ((ViewGroup) w.getDecorView()).addView(view);
                view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
            }
        }
    
        19
  •  4
  •   Engr Syed Rowshan Ali    5 年前

    更改 颜色主要为深色 将您想要的颜色转换为res/values/styles.xml文件

        <resources>
            <color name="colorPrimary">#800000</color>
            <color name="colorPrimaryDark">#303F9F</color> //This Line
            <color name="colorAccent">#FF4081</color>
            <color name="red">#FF0000</color>
            <color name="white">#FFFFFF</color>
           <color name="cream">#fffdd0</color>
           <color name="burgundy">#800000</color>
        </resources>
    
        20
  •  2
  •   Vova K.    9 年前

    还有一个解决方案:

    final View decorView = w.getDecorView();
    View view = new View(BaseControllerActivity.this);
    final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
    view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
    view.setBackgroundColor(colorValue);
    ((ViewGroup)decorView).addView(view);
    
        21
  •  2
  •   Anh Duy    2 年前

    此解决方案仅适用于API>=23. 在API级别30中,setSystemUiVisibility()已被弃用。因此,应按如下方式使用WindowInsetsControllerCompat

    fun changeColorStatusBar(color: Int = R.color.white) {
            val window: Window = window
            val decorView = window.decorView
            val wic = WindowInsetsControllerCompat(window, decorView)
            wic.isAppearanceLightStatusBars = true
            // And then you can set any background color to the status bar.
            window.statusBarColor = ContextCompat.getColor(this, color)
        }
    
        22
  •  1
  •   Ahmet B.    4 年前

    如果要设置自定义可绘制文件,请使用以下代码段

    fun setCustomStatusBar(){
        if (Build.VERSION.SDK_INT >= 21) {
            val decor = window.decorView
            decor.viewTreeObserver.addOnPreDrawListener(object :
                ViewTreeObserver.OnPreDrawListener {
                override fun onPreDraw(): Boolean {
                    decor.viewTreeObserver.removeOnPreDrawListener(this)
                    val statusBar = decor.findViewById<View> 
                      (android.R.id.statusBarBackground)
                    statusBar.setBackgroundResource(R.drawable.bg_statusbar)
                    return true
                }
            })
        }
    }
    
        23
  •  1
  •   ItSNeverLate    3 年前
    <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
    

    Notice: 设置 colorPrimaryVariant

        24
  •  1
  •   Husnain Qasim    3 年前

    一个非常古老的问题。但是对于那些想要改变状态栏颜色的人 ANDROID 5.0, API 21 &以上根据 theme Dark Light 即使 Device DEFAULT . 之后将此代码放入您的活动中 super.onCreate(savedInstanceState); 和之前 setContentView(R.layout.activity_main);

    int currentNightMode = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
        switch (currentNightMode) {
            case Configuration.UI_MODE_NIGHT_NO:
                // Night mode is not active on device
                // For WHITE status bar Icons color to dark
                Window window = getWindow();
                View view = window.getDecorView();
                new WindowInsetsControllerCompat(window, view).setAppearanceLightStatusBars(true);
                break;
            case Configuration.UI_MODE_NIGHT_YES:
                // Night mode is active on device
                break;
        }
    

    而且在您的 style.xml 放这条线 <item name="android:statusBarColor">@color/colorWhite</item>

        25
  •  1
  •   Rehan Khan    2 年前

    Java语言: 在活动的onCreate方法中使用

    Window window = this.getWindow();
    window.setStatusBarColor(this.getResources().getColor(R.color.main_screen_bg_color));
    

    科特林:

    window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
    
        26
  •  0
  •   Hamdy Abd El Fattah    4 年前

    我使用此代码将状态栏更改为透明

        activity?.window?.setFlags(
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
        )
    

    要将其更改为样式中的颜色,请使用以下代码 我在onDetach()中的片段中使用

    activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
    
        27
  •  0
  •   Sarvesh Hon    3 年前

    从要更改状态栏颜色的活动调用方法。

    blackIconStatusBar(this, R.color.white);
    

    方法定义

    public static void blackIconStatusBar(Activity activity, int color) {
    
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, color));
    }
    
        28
  •  0
  •   burak isik    2 年前

    在values/theme.xml中,添加名为 name="android:statusBarColor" .

     <resources xmlns:tools="http://schemas.android.com/tools">
            <style name="Theme.YourAppName" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
                ...
                ...
                ...
                <!-- Status bar color. -->
                <item name="android:statusBarColor" tools:targetApi="l">@color/purple_700</item>
            </style>
        </resources>
    
        29
  •  0
  •   Carl M. Cartagena    2 年前

    在科特林,我能够使用以下方法解决这个问题:

      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
      window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)