状态栏变成白色,并且不显示它后面的内容

我正在尝试AppCompat的棉花糖。 而我想有一个透明的状态栏,但它变成白色。 我已经尝试了几个解决scheme,但他们并没有为我工作( 透明状态栏不能用windowTranslucentNavigation =“false” , 棒棒 堂 :绘制在颜色设置为透明的statusBar后面 )。 这里是相关的代码。

我的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> 

在这里输入图像说明

(晚会有点晚,但可能会帮助某人)

我有同样的问题。 不知何故,一些活动是正常的,而我创build的新的是显示白色状态栏,而不是colorPrimaryDark值。

在尝试了几个提示之后,我注意到正常工作的活动,其中所有使用CoordinatorLayout作为布局的根,而对于其他人,我已经用常规的布局replace了它,因为我不需要通过提供的特征(animation等) CoordinatorLayout

所以解决办法是使CoordinatorLayout成为根布局,然后在里面添加你以前的布局根。 这里是一个例子:

 <?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:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <!-- your activity content here--> </LinearLayout> </android.support.design.widget.CoordinatorLayout> 

请注意,没有android:fitsSystemWindows="true"这种解决scheme不适合我。

testing棒棒糖和棉花糖

我在这个链接中find了答案: 状态栏颜色不以“相对布局”作为根元素进行更改

所以事实certificate,我们需要删除

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

在styles.xml(v21)中。 它对我来说很好。

以上所有的尝试失败后,我发现明确设置主题解决了这个问题。

 setTheme(R.style.AppTheme); 

那必须在你的活动中的super.OnCreate()之前。

把这个添加到你的style.xml中

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

这在你的onCreate();

  getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

只要把这个项目放在你的v21 \ styles.xml中:

真正

它应该是这样的:

 <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:windowTranslucentStatus">true</item> </style> 

对我来说,它通过做以下工作:

  1. 设置主题.NoActionBar
  2. 将工具栏包装在android.support.design.widget.AppBarLayout
  3. 使android.support.design.widget.CoordinatorLayout作为父布局。

本质上,它是在colorPrimaryDark中绘制状态栏的第三步,否则,如果使用NoActionBar主题,则不绘制。 第二步将给你的工具栏覆盖

我解决了我的问题,将我的活动布局从FrameLayout更改为RelativeLayout。 谢谢大家谁试图帮助!

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/theme_primary_dark" android:fitsSystemWindows="true" /> </RelativeLayout> 

尝试层次结构查看器或ViewInspector 。 这些工具可能会帮助你。

我不确定是否迟到,但我希望它能帮助别人。 *使用适合布局的透明背景制作假视图,并将协调布局作为根布局元素。

 <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 

我面临同样的问题。 我所做的是,在“v21 / styles.xml”文件中更改了值true:

  <item name="android:windowDrawsSystemBarBackgrounds">true</item> 

至:

  <item name="android:windowDrawsSystemBarBackgrounds">false</item> 

我的猜测是,这是由你的android:windowBackground造成的。 是@color/background_material_light引用白色?

检查这个工具栏变成白色 – 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工具栏在input的 时候不 可见,直到全高 AppBarLayout – 布局有时一旦进入视图就不可见(即使没有input)

更好的方法

检查你的NoActionBar主题所在的style.xml文件。 确保它的父级为Theme.AppCompat.NoActionBar,并通过添加颜色scheme对其进行自定义。 最后根据需要设置您的主题。

以下是我的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> 
  <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> <item name="android:statusBarColor">@color/colorPrimaryDark</item> </style 

只需replace这个,statusBarColor应该是你期望的颜色,而不是TRANSPARENT

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

这对我有用。