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

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

enter image description here

我该怎么做?


你是在说手机的状态栏还是底部栏或其他什么东西?请更具体一些。 - KDeogharkar
4
这张图片已经说明了一切,我不知道这个术语。 - Humty
好的,我无法看到它。Imgur 在我的端被屏蔽了。是我的错误。 - KDeogharkar
可能是如何在Android中更改状态栏颜色的重复问题。 - malioboro
11个回答

66
你可以通过在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 Level 21及以上,您还可以使用代码中的Window.setStatusBarColor()方法。

根据文档

为使其生效,窗口必须使用 WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS来绘制系统栏背景, 并且不能设置WindowManager.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);

29

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

在 Android 5.0 之后的版本中,更改状态栏的颜色还需要在窗口上设置两个额外的标记;您需要添加 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));

19

您也可以将这些代码行添加到主活动中

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)
}

示例图片1 setStatusBarColor 在此输入图片描述

示例图片2 setNavigationBarColor 在此输入图片描述


17

添加状态栏颜色到你的样式中,完成。

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

这是针对 API 版本 21 或更高版本的。


7

修改状态栏颜色仅适用于Android 5.0及以上版本。

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文件中。项目colorPrimaryDark将用于您的应用程序状态栏颜色。

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

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

这将只在Lollipop及以上版本(API)的设备上可见。 附:你需要将Theme.AppCompat作为你的基础/主题。


1

在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(夜间)中添加以下内容。
<item name="colorPrimaryVariant">@color/status_bar_dark</item>

就是这样,编程愉快 ;)


1

像平常一样在主题中进行更改,比如不使用Jetpack Compose。在日间主题和夜间主题中使用colorPrimary和colorPrimaryVariant。

enter image description here

<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>

1
如果您使用自定义的操作栏,可以尝试这个。
<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>

希望这能帮到你。

快乐编程


0

要更改特定活动的颜色,只需在所需活动的主布局标记中使用以下代码:

app:statusBarBackground="@color/colorPrimaryDark"

或者在此处使用任何其他颜色值代替@color/colorPrimaryDark。在我的情况下,默认是CoordinatorLayout,它是所有布局的父级(请确保将所有其他布局放在此CoordinatorLayout内,否则可能无法正常工作)。

希望这可以帮助您,尽管我不完全确定如何实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接