状态栏变白且不显示其后的内容

101
我正在尝试在Marshmallow上使用AppCompat。我想要一个透明状态栏,但它变成了白色。我尝试了几种解决方案,但它们对我没有起作用。 (Transparent status bar not working with windowTranslucentNavigation="false", Lollipop : draw behind statusBar with its color set to transparent). 这是相关的代码。
我的styles.xml
<style name="Bacon" parent="Theme.Bacon"/>

<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/theme_primary</item>
    <item name="colorPrimaryDark">@color/theme_primary_dark</item>
    <item name="colorAccent">@color/theme_accent</item>
    <item name="windowActionBar">false</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@color/background_material_light</item>  
</style>

<style name="Theme.Bacon.Detail" parent="Bacon"/>

v21

<style name="Bacon" parent="Theme.Bacon">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>

<style name="Theme.Bacon.Detail" parent="Bacon">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

活动

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true" />

</FrameLayout>

片段

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="192dp"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginBottom="32dp"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:statusBarScrim="@color/black_trans80">

        <ImageView
            android:id="@+id/photo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@string/photo"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/anim_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

这里输入图片描述


你能解决这个问题吗?我也遇到了同样的问题。在我的一个活动中,状态栏是白色的。 - kirtan403
1
@kirtan403 我通过将我的Activity布局从FrameLayout更改为RelativeLayout来解决了我的问题。请查看我的答案。 - pt2121
我的代码只是相对的,但仍然出现了白色状态栏。我在这里发布了问题:https://dev59.com/v5Hea4cB1Zd3GeqPomZm - kirtan403
在苦苦挣扎了一天之后,我终于找到了适合我的解决方案。以下是答案链接:https://dev59.com/v5Hea4cB1Zd3GeqPomZm#33892569 - kirtan403
我将android:windowTranslucentStatus状态更改为false,现在它可以正常工作了。 - Kiran Benny Joseph
我曾经遇到过同样的问题,并通过这个链接解决了它。 - Kishan Solanki
27个回答

1
<item name="android:statusBarColor">@color/white</item>
<item name="android:windowLightStatusBar">true</item>

当你这样做时,时间等会显示在白色状态栏上。 或者你也可以给它设置透明颜色。

0
如果您正在使用RelativeLayout / CoordinatorLayout,这是对我有效的解决方案:
您必须使用
- CoordinatorLayout - AppBarLayout
请记住使用CoordinatorLayout代替RelativeLayout(性能更好,并与AppBarLayout完美配合)
这是您的片段应该如何开始的
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>

<android.support.design.widget.AppBarLayout
    android:id="@+id/main.appbar"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true"
    >
    ...

写代码愉快!


0
检查一下,工具栏变白 - AppBar在滚动到屏幕外后没有被绘制。

https://code.google.com/p/android/issues/detail?id=178037#c19

我正在使用23.0.0版本的库,但问题仍然存在。

解决此问题的方法是添加一个几乎不占用空间且可以隐藏的视图。请参见下面的结构。

<android.support.v4.widget.NestedScrollView
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</android.support.v4.widget.NestedScrollView>

<android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.Toolbar
        app:layout_scrollFlags="scroll|enterAlways" />

    <android.support.design.widget.TabLayout
        app:layout_scrollFlags="scroll|enterAlways" />

    <View
        android:layout_width="match_parent"
        android:layout_height=".3dp"
        android:visibility="visible"/>

</android.support.design.widget.AppBarLayout>

这些Stackoverflow.com上的问题也涉及到这个bug: CoordinatorLayout Toolbar invisible on enter until full height AppBarLayout - Layout sometimes invisible once it enters view (even if it's not entered)


这不是相同的 bug。在我的情况下,它是在活动显示之后而不是滚动屏幕后变成白色。无论如何还是谢谢。 - pt2121

0

将此代码添加到您的style.xml文件中

<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

注意:API级别低于21的设备不支持状态栏着色。


0

我的猜想是这是由于你的 android:windowBackground 引起的。 @color/background_material_light 是指白色吗?


不是的。它绝对不是白色的,但还是谢谢!(您可以看到它上面的白色图标。) - pt2121
我误读了你的问题。请尝试将 <item name="android:statusBarColor">@android:color/transparent</item> 替换为 <item name="android:statusBarColor">@null</item> - user340145
只是为了确保我理解你的意思,你想要将图像显示在状态栏后面吗? - user340145

0
 <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

在样式中添加'windowTranslucentStatus'项目


-1
    Window window = this.getWindow();
    window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));

在Java文件下面添加这两行代码。

1
欢迎来到 Stack Overflow。您能否详细说明一下您的代码是如何工作的,以及它如何帮助解决 OP 的问题?请参考 如何撰写好答案 来改善您的回答。 - Tom M

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