在安卓中更改状态栏颜色

10

我正在开发一个安卓应用,现在想要改变状态栏(屏幕顶部显示无线和区域信号、电量状态等的那个),但是没有成功。

在 XML 文件的预览中,它显示了我想要使用的橙色色调,但是当我在模拟器和手机上运行应用时,颜色仍然是白色。

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

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

这是 Android Studio 中 XML 文件的预览

这是应用程序的模拟:

应用程序的模拟

这是我的 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条目和活动代码吗? - Kevin O'Neil
刚刚发布了Android清单文件! - Marcos Guimaraes
谢谢,您能同时发布活动的代码吗? - Kevin O'Neil
可能是如何在Android中更改状态栏颜色的重复问题。 - msal
5个回答

15
在你的清单文件中,你已将所有的活动主题指定为 NoActionBar
但在 styles.xml 中,你没有添加下面这行代码: <item name="android:statusBarColor">@color/theme_color</item>NoActionBar 主题的样式中添加上述代码,则状态栏的颜色一定会改变。
但需要注意,该方法只适用于 API 级别 21 及以上版本。

“NoActionBar”主题使用点符号从“AppTheme”派生属性,因此设置了“android:statusBarColor”,无需添加该行。 - Zielony

4
您可以使用以下几行代码更改状态栏颜色:
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"));

2
在KitKat中,状态栏颜色不会改变,但是在Lollipop和Marshmallow中可以看到它的变化。
在“res/values/colours”中。
<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

1
将以下代码放入活动的.java文件中以更改状态栏颜色:
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.parseColor("#0D1528"));

0

如果您正在使用DrawerLayout,您可以使用以下方法

drawerLayout.setStatusBarBackground(R.color.status)

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