我在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>
答案 0 :(得分:142)
我在此链接中找到了答案:Status Bar Color not changing with Relative Layout as root element
所以事实证明我们需要删除
<item name="android:statusBarColor">@android:color/transparent</item>
在styles.xml(v21)中。它对我来说很好。
答案 1 :(得分:93)
(派对有点晚,但可能对某人有帮助)
我遇到了完全相同的问题。不知何故,有些活动是正常的,而我创建的新活动却显示白色状态栏而不是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_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"
,此解决方案对我无效。
在Lollipop和Marshmallow上进行测试
答案 2 :(得分:12)
<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
答案 3 :(得分:9)
在尝试了以上所有方法失败后,我发现明确设置主题修复了问题。
setTheme(R.style.AppTheme);
必须在活动中的super.OnCreate()之前。
答案 4 :(得分:7)
在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);
答案 5 :(得分:7)
只需将此项目放入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>
答案 6 :(得分:6)
我遇到了同样的问题。我所做的是,在&#34; v21 / styles.xml&#34;文件a更改了值true:
<item name="windowDrawsSystemBarBackgrounds">true</item>
为:
<item name="windowDrawsSystemBarBackgrounds">false</item>
答案 7 :(得分:4)
<item name="android:statusBarColor">@android:color/transparent</item>
您将在values / styles / styles.xml(v21)中看到该行代码。删除它即可解决问题
答案 8 :(得分:4)
只需从样式v21中删除以下标记即可 @android:彩色/透明
这适合我。
答案 9 :(得分: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>
答案 10 :(得分:3)
您必须在样式上添加此属性才能查看内容
<item name="android:windowLightStatusBar" tools:ignore="NewApi">true</item>
答案 11 :(得分:2)
对我而言,它的工作原理如下:
.NoActionBar
android.support.design.widget.AppBarLayout
android.support.design.widget.CoordinatorLayout
设为父布局。 基本上,这是在colorPrimaryDark
中绘制状态栏的第三步,否则如果您使用NoActionBar
主题则不会绘制状态栏。
第2步将为您的工具栏提供叠加。
答案 12 :(得分:1)
我不确定是否会迟到但我希望它可以帮到某人。 *使用适合布局的透明背景制作假视图,并将coordinatorlayout作为根布局元素。
2016-10-30 17:26:10.429404 PHPProcessor Test[38190:2886757] verifying buffer from read_post: a=123&b=456
2016-10-30 17:26:10.429931 PHPProcessor Test[38190:2886757] resultString:
<pre>
GET: Array
(
)
POST: Array
(
)
SERVER: Array
(
[SERVER_SOFTWARE] => PHPProcessor Test
[REQUEST_TIME_FLOAT] => 1477862770.425
[REQUEST_TIME] => 1477862770
[argv] => Array
(
)
[argc] => 0
)
ENV: Array
(
[SHELL] => /bin/bash
...
)
</pre>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
...
<title>phpinfo()</title>
...
<body><div class="center">
<table>
<tr class="h"><td>
<a href="http://www.php.net/"><img border="0" src="data:image/png;base64,..." alt="PHP logo" /></a><h1 class="p">PHP Version 5.6.27</h1>
...
</table>
</div></body></html>
答案 13 :(得分:1)
对于样式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>
答案 14 :(得分:1)
这对我有用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
答案 15 :(得分:1)
如果您的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>
工作正常。希望这会有所帮助。谢谢。
答案 16 :(得分:1)
我已经找到解决方法-
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowLightStatusBar">true</item>
</style>
将此样式添加到您的样式中,它将适用于api 21或更高版本。
答案 17 :(得分:0)
在onCreate
内添加以下内容:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getWindow().setStatusBarColor(Color.WHITE);
及以下
setContentView(R.layout.activity_main);
答案 18 :(得分:0)
将其添加到您的style.xml
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
注意:API级别21以下不支持状态栏着色。
答案 19 :(得分:0)
您想要这个权利吗?
尝试一下。在[值]-[style.xml]
中<style name="AppTheme" parent="Theme.AppCompat.DayNight.DarkActionBar">
<item name="android:windowLightStatusBar">true</item>
</style>
您知道,与主题不匹配-父级
祝你好运
答案 20 :(得分: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”项
答案 21 :(得分:0)
如果您使用的是 RelativeLayout / CoordinatorLayout ,这是对我有用的解决方案:
您必须使用
Rember可以使用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"
>
...
好的编码!
答案 22 :(得分:0)
[
展开res - &gt;值 - &gt;项目面板中的样式目录。
打开styles.xml(v21)
从以下任何方式使用
android:windowDrawsSystemBarBackgrounds
属性中将 true 更改为 false 。android:statusBarColor
属性中的 @ color / colorPrimaryDark 。android:statusBarColor
属性行。答案 23 :(得分:0)
检查一下 工具栏变为白色 - 在屏幕滚动后不会绘制AppBar
https://code.google.com/p/android/issues/detail?id=178037#c19
我正在使用库23.0.0。并且仍然会发生错误。
解决方法是添加几乎没有空间且可以隐藏的View。请参阅下面的结构。
<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上的这个问题也引用了这个错误: CoordinatorLayout Toolbar invisible on enter until full height AppBarLayout - Layout sometimes invisible once it enters view (even if it's not entered)
答案 24 :(得分:0)
我的猜测是,这是由@color/background_material_light
造成的。 {{1}}是否是白色的引用?
答案 25 :(得分:-1)
Window window = this.getWindow();
window.setStatusBarColor(this.getResources().getColor(R.color.colorPrimaryDark));
在下面的Java文件中添加这2行