web-dev-qa-db-ja.com

Android AppTheme.NoActionBarの使用時にステータスバーが透明になる

自動生成されたAppTheme.NoActionBarAndroid:themeを介してアクティビティに適用すると、次のようになります。

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は、上部に透明なステータスバーが表示され、最終的には白い背景と白いテキストが表示されます。デバイスが充電中の場合、それが表示される唯一の記号です。

Transparent ActionBar

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>

2番目のスタイルでは、デフォルトでAppThemeを継承するAppTheme.NoActionBarを確認できますが、どちらのスタイルでも、ステータスバーを透明にする必要があることは指定されていません。

15
SupaHam

この問題に遭遇した場合、values-v21というフォルダーがあり、その中にstyles.xml。このファイルは、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の下。コードを見ると、Wordを最後まで透過的に見るだけで、すぐに問題を特定できます。少し左に行くと、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>

そして、これがそのスタイルの削除の結果です:

Fixed result

Good ol 'opaque status bar

41
SupaHam