2016-06-03 53 views
9

Quando applico l'auto-generata AppTheme.NoActionBar alla mia attività via android:theme in questo modo:Android barra di stato trasparente quando si utilizza 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> 

mio MainActivity è reso con una barra di stato trasparente nella parte superiore, che alla fine ha uno sfondo bianco e testo bianco su di esso. Se il dispositivo è in carica, questo è l'unico simbolo visibile.

Transparent ActionBar

ActionBar trasparente da AppTheme.NoActionBar

Ecco il mio valori/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> 

Nel secondo stile, si può vedere AppTheme.NoActionBar, che per impostazione predefinita eredita AppTheme, tuttavia da nessuna parte in nessuno dei due stili viene specificato che la barra di stato deve essere trasparente.

risposta

17

Le probabilità sono, se hai incontrato questo problema, si dispone di una cartella chiamata valori-V21 e in essa un file chiamato styles.xml. Questo file definisce lo stile per i dispositivi che utilizzano l'API 21+ (Android 5.0+). Molto probabilmente questo file contiene il seguente stile chiamato AppTheme.NoActionBar. Suona familiare?

valori-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 è stato definito nei valori /styles.xml previsto nella domanda, che è ancora valido, tuttavia, che il file viene utilizzato solo per dispositivi sotto API 21. Se si guarda il codice, è possibile identificare immediatamente il problema semplicemente vedendo la parola trasparente fino alla fine. Un po 'a sinistra e vediamo statusBarColor e voilà. Questo è il problema. Se non si è in grado di fornire questo stile per gli utenti più aggiornati, è possibile semplicemente rimuovere la riga dello stile.

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

Ed ecco il risultato di tale rimozione stile:

Fixed result

Il buon vecchio' barra di stato opaco