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

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个回答

5

只需从style v21中删除以下标签 @android:color/transparent

这对我很有用。


@android:color/transparent 不是一个“标签”。它可能是样式属性的值,但它不是“标签”。如果 OP 定义了多个此值,应该删除哪一个?你的答案太泛泛了。 - protectedmember
是的,我也有过这种情况。谢谢你,Shendre!:) 还有你的评论,@protectedmember - 操作系统没有性别。 - zeroDivider

5
我已经找到了解决方案——
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

将以下内容添加到你的样式中,它将适用于 API 21 或更高版本。


3
对于样式 v23:
 <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowLightStatusBar">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

针对v21样式

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:statusBarColor">@android:color/white</item>
</style>

3
如果您的v21/styles.xml包含以下内容:
<resources>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

接下来,删除注释掉以下行或更改状态栏的颜色,

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

它运行良好。希望这对您有所帮助。谢谢。


3
更好的方法:
检查您的style.xml文件,确保其中有NoActionBar主题,并且其父级为Theme.AppCompat.NoActionBar,还可以通过添加您的颜色方案来自定义它。最后根据需要在清单中设置您的主题。
以下是我的styles.xml文件示例(包括ActionBar和NoActionBar)。
<!-- 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>
</style>

<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

2
对于我来说,以下步骤起作用:
  1. 设置主题为 .NoActionBar
  2. android.support.design.widget.AppBarLayout 中包装工具栏
  3. android.support.design.widget.CoordinatorLayout作为父布局。
基本上,第三步会在colorPrimaryDark中绘制状态栏,否则如果使用NoActionBar主题,则不会绘制。第二步将使您的工具栏具有覆盖效果。

2

[输出

从项目面板中展开res -> values -> styles目录。

打开styles.xml (v21)

使用以下任意一种方式

  1. android:windowDrawsSystemBarBackgrounds属性中将true更改为false
  2. android:statusBarColor属性中将@android:color/transparent更改为@color/colorPrimaryDark
  3. 删除android:statusBarColor属性行。

1
我不确定是否晚了,但希望能对某些人有所帮助。 * 制作一个透明背景的假视图来适应布局,并将coordinatorlayout设置为根布局元素。

<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:fitsSystemWindows="true" />


<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:scaleType="centerCrop"
    android:src="@drawable/something" />

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   .... YOUR LAYOUT


1
onCreate 中添加以下内容:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
       getWindow().setStatusBarColor(Color.WHITE);

和下面
 setContentView(R.layout.activity_main);

1

您希望这样做,对吗?

尝试这个。在[value] - [style.xml]中。

<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

你知道的,不要匹配apptheme-parent。
祝好运。

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