Android 使用时状态栏透明 AppTheme.NoActionBar
Android Status Bar transparent when using AppTheme.NoActionBar
当我通过 android:theme
将自动生成的 AppTheme.NoActionBar
应用到我的 activity 时,如下所示:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mypackage">
<application
...
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar" />
</application>
</manifest>
我的 MainActivity 呈现为顶部透明状态栏,最终有白色背景,上面有白色文本。如果设备正在充电,那是唯一可以看到的符号。
来自 AppTheme.NoActionBar
的透明 ActionBar
这是我的 values/styles.xml:
<resources>
<!-- 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>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
</resources>
第二种风格可以看到AppTheme.NoActionBar
,默认继承AppTheme,但是两种风格都没有指定状态栏透明
如果您遇到此问题,很可能有一个名为 values-v21 的文件夹,其中有一个名为 [=53= 的文件]。此文件使用 API 21+ (Android 5.0+) 定义设备样式。该文件也很可能包含以下名为 AppTheme.NoActionBar
的样式。听起来很熟悉?
values-v21/styles.xml:
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
AppTheme.NoActionBar
是在问题中提供的 values/styles.xml 中定义的,它仍然有效,但是该文件仅用于 API 21 下 的设备。如果您查看代码,只需在最后看到透明这个词,就可以立即确定问题所在。向左一点,我们看到 statusBarColor
瞧。这就是问题所在。如果您不想为更多最新用户提供此样式,您可以简单地删除那行样式。
values-v21/styles.xml:
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>
下面是删除该样式的结果:
不错的不透明状态栏
当我通过 android:theme
将自动生成的 AppTheme.NoActionBar
应用到我的 activity 时,如下所示:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mypackage">
<application
...
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar" />
</application>
</manifest>
我的 MainActivity 呈现为顶部透明状态栏,最终有白色背景,上面有白色文本。如果设备正在充电,那是唯一可以看到的符号。
来自 AppTheme.NoActionBar
的透明 ActionBar这是我的 values/styles.xml:
<resources>
<!-- 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>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
</resources>
第二种风格可以看到AppTheme.NoActionBar
,默认继承AppTheme,但是两种风格都没有指定状态栏透明
如果您遇到此问题,很可能有一个名为 values-v21 的文件夹,其中有一个名为 [=53= 的文件]。此文件使用 API 21+ (Android 5.0+) 定义设备样式。该文件也很可能包含以下名为 AppTheme.NoActionBar
的样式。听起来很熟悉?
values-v21/styles.xml:
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
AppTheme.NoActionBar
是在问题中提供的 values/styles.xml 中定义的,它仍然有效,但是该文件仅用于 API 21 下 的设备。如果您查看代码,只需在最后看到透明这个词,就可以立即确定问题所在。向左一点,我们看到 statusBarColor
瞧。这就是问题所在。如果您不想为更多最新用户提供此样式,您可以简单地删除那行样式。
values-v21/styles.xml:
<resources>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>
下面是删除该样式的结果:
不错的不透明状态栏