状态栏变白,后面不显示内容
Posted
技术标签:
【中文标题】状态栏变白,后面不显示内容【英文标题】:Status bar turns white and does not show content behind it 【发布时间】:2015-12-02 10:06:18 【问题描述】:我正在 Marshmallow 上试用 AppCompat。我想要一个透明的状态栏,但它会变成白色。我尝试了几种解决方案,但它们对我不起作用(Transparent status bar not working with windowTranslucentNavigation="false"、Lollipop : draw behind statusBar with its color set to transparent)。这是相关代码。
我的样式.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_
android:layout_
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
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_
android:layout_
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_
android:layout_
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_
android:layout_
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_
android:layout_
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
【问题讨论】:
你能解决这个问题吗?我有同样的问题。在我的一项活动中,状态栏为白色 @kirtan403 我通过将我的 Activity 布局从 FrameLayout 更改为 RelativeLayout 来解决我的问题。请看我的回答。 我的是相对的,只是仍然获得白色状态栏。我在这里发布了问题:***.com/q/33890066/1820644 经过一天的努力,我找到了适合我的解决方案。这是答案:***.com/a/33892569/1820644 我将 android:windowTranslucentStatus 状态更改为 false 并且可以正常工作 【参考方案1】:我在这个链接中找到了答案:Status Bar Color not changing with Relative Layout as root element
所以事实证明我们需要删除
<item name="android:statusBarColor">@android:color/transparent</item>
在样式.xml(v21) 中。它对我来说很好用。
【讨论】:
是的,这就是解决方案。因为 android:fitsSystemWindows 在使标签栏可滚动时会导致问题。找到了相同的答案,但您之前发布了它。还要提到我认为这是默认覆盖的。 这应该被标记为接受的解决方案。这个问题在我的应用程序中蔓延,这个解决方案只是通过注释掉那一行来解决它。救了我这么头痛! 我正在使用 CoordinatorLayout,因此对我们 CoordinatorLayout 作为根的另一个答案对我不起作用(按照建议使用 fitSystemWindows=true 也不起作用)。这个答案对我有用。 如果我要求状态栏颜色透明怎么办? @nullmn 那么您需要将您的活动背景更改为其他内容。【参考方案2】:(聚会有点晚了,但它可能会对某人有所帮助)
我遇到了完全相同的问题。不知何故,一些活动是正常的,而我创建的新活动显示白色状态栏而不是 colorPrimaryDark
值。
在尝试了几个技巧后,我注意到正常工作的活动都使用CoordinatorLayout
作为布局的根,而对于其他活动,我已将其替换为常规布局,因为我不需要这些功能(动画等)由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_
android:layout_
android:fitsSystemWindows="true">
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_
android:layout_
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
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"
,此解决方案对我不起作用。
在棒棒糖和棉花糖上测试
【讨论】:
该解决方案也对我有用。但是..为什么会这样?当 root 为 DrawerLayout 或 CoordinatorLayout 时显示正确的 StatusBar 颜色 这仅适用于我在 Android 8 中将android:fitsSystemWindows="true"
添加到 CoordinatorLayout
时。
@Franco 我认为这是解决方案中最相关的部分。我这样说是因为当我遇到同样的问题时我有CoordinatorLayout
,而为我解决这个问题的特定属性是android:fitsSystemWindows="true"
android:fitsSystemWindows="true"
对我不起作用。解决我的问题的方法是在带有CoordinatorLayout
的活动中使用不是AppTheme.NoActionBar
的主题。我不知道为什么会修复它。
CoordinatorLayout
或 android:fitsSystemWindows="true"
都不适合我。【参考方案3】:
您必须在样式中添加此属性才能查看内容
<item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>
【讨论】:
这对我有用。这应该是被接受的答案。【参考方案4】: <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
只需替换这个,statusBarColor 应该是您预期的颜色,而不是 TRANSPARENT
【讨论】:
【参考方案5】:在你的 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);
【讨论】:
谢谢,但这不起作用。状态栏看起来一样。 请帮助解决这个问题...同样的问题在这里....到目前为止,没有任何解决方案有效 @SaeedJassani 我找到了一个适合我的解决方案。如果您有同样的问题,请查看我的问题和答案:***.com/a/33892569/1820644【参考方案6】:只需将此项目放入您的 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>
【讨论】:
在最后两项中使用false
值对我有用。很奇怪,但谢谢。
它只适用于最后两行,但内容在状态栏后面,填充/边距或 fitSystemWindows 无济于事。在运行牛轧糖的 OP 5 上测试【参考方案7】:
在尝试上述所有方法均未成功后,我发现明确设置主题可以解决问题。
setTheme(R.style.AppTheme);
这必须在你的活动中的 super.OnCreate() 之前。
【讨论】:
我可以确认这修复了 Marshmallow 上的错误活动 爱你,工作就像一个魅力,虽然我仍然不知道为什么:@ 在 super.OnCreate() 之前是关键【参考方案8】:我遇到了同样的问题。我所做的是,在“v21/styles.xml”文件中更改了值 true:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
到:
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
【讨论】:
【参考方案9】:<item name="android:statusBarColor">@android:color/transparent</item>
您将在 values/styles/styles.xml(v21) 中看到该行代码。删除它并解决问题
Link to this answer
【讨论】:
【参考方案10】:我通过将我的 Activity 布局从 FrameLayout 更改为 RelativeLayout 来解决我的问题。感谢所有试图提供帮助的人!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:background="@android:color/transparent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_
android:layout_
android:background="@color/theme_primary_dark"
android:fitsSystemWindows="true" />
</RelativeLayout>
试试hierarchy-viewer 或ViewInspector。这些工具可能会对您有所帮助。
【讨论】:
【参考方案11】:只需从样式 v21 中删除以下标记 @android:颜色/透明
这对我有用。
【讨论】:
@android:color/transparent 不是“标签”。它可能是样式属性的值,但不是“标签”。如果 OP 不止一次定义了这个值怎么办?他应该删除哪一个?你的回答太笼统了。 是的,我也是这样。谢谢你,Shendre! :) 对于您的评论,@protectedmember - 操作系统没有性别。【参考方案12】:我已经找到了解决方案 -
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowLightStatusBar">true</item>
</style>
将此添加到您的样式中,它将适用于 api 21 或更高版本。
【讨论】:
【参考方案13】:更好的方法
检查您的 NoActionBar 主题所在的 style.xml 文件。 确保它的父级为 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>
【讨论】:
【参考方案14】:对于样式 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>
【讨论】:
【参考方案15】:对我来说,它通过以下方式起作用:
-
设置主题
.NoActionBar
将工具栏包裹在android.support.design.widget.AppBarLayout
将android.support.design.widget.CoordinatorLayout
设为父布局。
本质上是在colorPrimaryDark
中绘制状态栏的第三步,否则如果您使用NoActionBar
主题,则不会绘制。
第二步将为您的工具栏提供 overlay。
【讨论】:
【参考方案16】:[
从项目面板展开 res -> values -> 样式目录。
打开styles.xml (v21)
使用以下方式中的任何一种
-
在
android:windowDrawsSystemBarBackgrounds
属性中将 true 更改为 false。
在 android:statusBarColor
属性中将 @android:color/transparent 更改为 @color/colorPrimaryDark。
删除android:statusBarColor
属性行。
【讨论】:
【参考方案17】:如果您的 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>
它工作正常。希望这会有所帮助。谢谢。
【讨论】:
【参考方案18】:我不确定是否晚了,但我希望它对某人有所帮助。 * 制作一个适合布局的具有透明背景的假视图,并将 coordinatorlayout 作为您的根布局元素。
<View
android:layout_
android:layout_
android:background="@android:color/transparent"
android:fitsSystemWindows="true" />
<ImageView
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/something" />
<FrameLayout
android:layout_
android:layout_>
.... YOUR LAYOUT
【讨论】:
【参考方案19】:你想要这个吗?
试试这个。在 [值] - [style.xml]
<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="android:windowLightStatusBar">true</item>
</style>
你知道,不要匹配 apptheme - parent
祝你好运
【讨论】:
【参考方案20】:我的猜测是这是由您的android:windowBackground
引起的。 @color/background_material_light
是指白色吗?
【讨论】:
不。它绝对不是白色的,但无论如何谢谢! (你可以看到上面的白色图标。) 我看错了你的问题。尝试将<item name="android:statusBarColor">@android:color/transparent</item>
替换为<item name="android:statusBarColor">@null</item>
。
只是为了确保我对您的理解正确,您希望图像显示在状态栏后面吗?【参考方案21】:
检查这个 工具栏变白 - 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_
android:layout_
android:visibility="visible"/>
</android.support.design.widget.AppBarLayout>
***.com 上的这个问题也提到了这个错误: CoordinatorLayout Toolbar invisible on enter until full height AppBarLayout - Layout sometimes invisible once it enters view (even if it's not entered)
【讨论】:
这不是同一个错误。在我的情况下,它在活动显示后不是在滚动屏幕后显示为白色。还是谢谢【参考方案22】:如果您使用的是 RelativeLayout / 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_
android:layout_
android:background="@android:color/background_light"
android:fitsSystemWindows="true"
>
<android.support.design.widget.AppBarLayout
android:id="@+id/main.appbar"
android:layout_
android:layout_
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true"
>
...
编码不错!
【讨论】:
【参考方案23】: <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”项
【讨论】:
【参考方案24】:在你的 style.xml 中添加这个
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
注意:API 级别 21 以下不支持状态栏着色。
【讨论】:
【参考方案25】:在onCreate
内添加以下内容:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.WHITE);
及以下
setContentView(R.layout.activity_main);
【讨论】:
【参考方案26】: Window window = this.getWindow();
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
在下面的java文件中添加这2行
【讨论】:
欢迎来到 Stack Overflow。您能否详细说明您的代码是如何工作的以及它如何帮助解决 OPs 问题?请参考how to write a good answer 改进您的答案以上是关于状态栏变白,后面不显示内容的主要内容,如果未能解决你的问题,请参考以下文章
Win10创建文件不显示,Windows任务栏idea图标变白
Win10创建文件不显示,Windows任务栏idea图标变白