2016-06-03 25 views
9

Wenn ich die automatisch generierte AppTheme.NoActionBar meiner Tätigkeit über android:theme wie so gelten:Android Statusleiste transparent bei der Verwendung von AppTheme.NoActionBar

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> 

Mein MainActivity ist gerendert mit einer transparenten Statusleiste an der Spitze, die schließlich einen weißen Hintergrund und weißen Text darüber hat. Wenn das Gerät lädt, ist das das einzige Symbol, das man sehen kann.

Transparent ActionBar

Transparent ActionBar von AppTheme.NoActionBar

Hier ist mein Werte/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> 

Im zweiten Stil, können Sie AppTheme.NoActionBar sehen, die Standardmäßig erbt AppTheme, aber nirgendwo in beiden Stil gibt an, dass die Statusleiste transparent sein soll.

Antwort

17

Die Chancen stehen gut, wenn Sie über dieses Thema gekommen sind, haben Sie einen Ordner Werte-v21 und in eine Datei namens styles.xml genannt. Diese Datei definiert das Styling für Geräte mit API 21+ (Android 5.0+). Diese Datei enthält wahrscheinlich auch den folgenden Stil mit dem Namen AppTheme.NoActionBar. Klingt bekannt?

Werte-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 in den Werten definiert wurde/styles.xml in der Frage zur Verfügung gestellt, die immer noch gültig ist, aber diese Datei nur verwendet für Geräte unter API 21. Wenn Sie sich den Code anschauen, können Sie das Problem sofort erkennen, indem Sie das Wort bis zum Ende transparent sehen. Ein wenig nach links und wir sehen statusBarColor und voila. Das ist das Problem. Wenn Sie nicht möchten, dass Sie dieses Styling für aktuellere Benutzer bereitstellen, können Sie einfach die Zeile des Stylings entfernen.

Werte-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> 

Und hier ist das Ergebnis dieser Art Entfernung:

Fixed result

Good ol‘undurchsichtige Statusleiste