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

Hum*_*mty 20 android

我想在Android Studio中更改突出显示栏的颜色:

在此输入图像描述

我该怎么做?

ear*_*jim 41

您可以通过在styles.xml中设置您为应用程序使用的样式的android:statusBarColoror android:colorPrimaryDark属性来更改它.

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

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

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/your_custom_color</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在API级别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.


小智 23

状态栏是操作系统拥有的系统窗口. 在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));
Run Code Online (Sandbox Code Playgroud)


Faa*_*hir 8

您还可以在主活动中添加这些代码行

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


Mas*_*rzi 8

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

<item name="android:statusBarColor">@color/black</item>
Run Code Online (Sandbox Code Playgroud)

对于API级别21


小智 5

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

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

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
Run Code Online (Sandbox Code Playgroud)