在Android中更改状态栏颜色

Posted

技术标签:

【中文标题】在Android中更改状态栏颜色【英文标题】:Change status bar color in Android 【发布时间】:2016-09-08 21:31:46 【问题描述】:

我正在构建一个 android 应用程序,现在我想更改状态栏(屏幕顶部显示无线和区域信号、电池状态等的状态栏)但它不起作用。

在 XML 文件的预览中,它为栏显示了不同的颜色(我想使用的橙色阴影),但是当我在模拟器和手机上运行应用程序时,颜色保持为白色。

我隐藏了操作栏并在应用顶部放置了一个灰色图像。

这是 XML 文件在 Android Studio 中的预览

这是应用程序的仿真:

这是我的colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="theme_color">#D8540D</color>
    <color name="toolbar_title_color">#E66800</color>
    <color name="grey">#d3d3d3</color>
    <color name="maroon">#7f0000</color>
    <color name="color_textual">#8D5020</color>
    <color name="chef_bg_color">#F7F7F7</color>
    <color name="line_color">#dddddd</color>

</resources>

这是我的styles.xml:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:statusBarColor">@color/theme_color</item>
        <item name="android:navigationBarColor">@color/theme_color</item>
        <item name="android:colorEdgeEffect">@color/theme_color</item>
    </style>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

Android 清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mvaguimaraes.bt">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainScreen"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

        </activity>

        <activity android:name=".OrderDetails"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

        </activity>

        <activity android:name=".PastOrderDetails"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">

        </activity>
    </application>

</manifest>

【问题讨论】:

您能否发布活动的 manifest.xml 条目以及活动的代码? 刚刚发布了 Android Manifest! 谢谢,您也可以发布活动代码吗? How to change the status bar color in android的可能重复 【参考方案1】:

在所有活动的清单文件中,您将主题指定为 NoActionBar

但在 NoActionBar 主题内的 styles.xml 中,您没有在下面的代码行中添加:

&lt;item name="android:statusBarColor"&gt;@color/theme_color&lt;/item&gt;

NoActionBar 主题样式中添加上面的代码行,然后您的状态栏的颜色肯定会改变。

但是是的,它适用于 api 级别 21 及以上。

【讨论】:

NoActionBar 主题使用点符号从AppTheme 派生属性,因此设置了android:statusBarColor,无需添加该行。【参考方案2】:

您可以使用以下几行更改状态栏颜色:

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
window.setStatusBarColor(Color.parseColor("#your color"));

【讨论】:

【参考方案3】:

在 KitKat 状态栏颜色不会改变,但你可以在 Lollipop 和 Marshmallow 中看到它的变化。

在“分辨率/值/颜色”中

<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>

在 kitkat 之后,“colorPrimaryDark”将应用于状态栏,“colourPrimary”将自动​​用于工具栏/动作栏。

这个链接可能对https://developer.android.com/training/material/theme.html有帮助

【讨论】:

【参考方案4】:

如果你使用的是 DrawerLayout,你可以使用下面的方法

drawerLayout.setStatusBarBackground(R.color.status)

【讨论】:

以上是关于在Android中更改状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

Android:API 级别低于 21 的状态栏颜色更改

如何删除在android中更改的自动状态栏颜色

如何更改android状态栏的背景颜色

无法使用 IONIC 5 在 Android 中更改状态栏颜色

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

Flutter,Android - 是不是可以在启动(启动)屏幕上更改状态栏颜色?