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

时间:2016-09-06 06:17:56

标签: android

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

enter image description here

我该怎么做?

11 个答案:

答案 0 :(得分:37)

您可以通过在 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_BACKGROUNDS和   不得设置WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS。   如果颜色不是不透明的,请考虑设置   View.SYSTEM_UI_FLAG_LAYOUT_STABLE和   View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

答案 1 :(得分:21)

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

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

答案 2 :(得分: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
      }

答案 3 :(得分:6)

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

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

答案 4 :(得分:3)

<item name="colorPrimaryDark">@color/your_color</item> 
只有在Lollipop和大于Lollipop(API)设备中才能看到

。 附:你需要将Theme.AppCompat作为基础/主题

答案 5 :(得分:1)

更改状态栏颜色仅适用于棒棒糖上方的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文件中的主题样式。项目colorPrimaryDark将用于您的应用状态栏颜色

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

答案 6 :(得分:1)

如果您使用自定义actionBar,则可以尝试这一操作。

CREATE TRIGGER sovrapposizione_spettacoli
BEFORE INSERT ON Spettacoli 
FOR EACH ROW
BEGIN 
DECLARE 
CURSOR c1 IS SELECT data_e_ora, durata FROM mv_spettacoli_attivi s WHERE s.codice_sala=: NEW.sala; inizio_spettacolo     mv_spettacoli_attivi.data_e_ora%TYPE; durata_spettacolo     mv_spettacoli_attivi.durata

或者如果您使用AppTheme 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>

希望这会对您有所帮助。

HappyCoding

答案 7 :(得分: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(night)中添加这个

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

就这样,快乐编码;)

答案 8 :(得分:0)

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

app:statusBarBackground =“ @ color / colorPrimaryDark”

或您希望在父布局标签中进行的活动的邮件布局文件中替换@color/colorPrimaryDark的任何其他颜色值,例如在我的情况下,默认值为CoordinatorLayout是所有父项(保持所有此CoordinatorLayout中的其他布局,否则可能无法正常工作

希望这会有所帮助,尽管我不确定如何做到这一点,但对我来说还是有用的。

答案 9 :(得分:0)

像往常一样在主题中更改它,例如不使用 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>

答案 10 :(得分:-3)

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