状态栏变成白色,并且不显示它后面的内容
我正在尝试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>
对我来说,它通过做以下工作:
- 设置主题
.NoActionBar
- 将工具栏包装在
android.support.design.widget.AppBarLayout
- 使
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
这对我有用。
- 从v4.Fragment请求运行时权限,并callback到Fragment?
- 找不到com.google.android.gms:play-services:3.1.59 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.52 5.0.77 5.0.89 5.2.08 6.1。 11 6.1.71 6.5.87
- AsyncTask线程永远不会死
- 什么是Android SDK构build工具,平台工具和工具? 哪个版本应该使用?
- Facebook的“Messenger”有一个SMS广播接收器,在重启后具有最高优先级
- 如何在Eclipse中构buildAPK文件?
- setMobileDataEnabled方法在Android L及更高版本中不再可调用
- 编写新的DialogPreference类的简洁方法?
- 如何处理libGDX中的不同长宽比?