8

Sto cercando di realizzare una barra di stato traslucida (in modo che la mia vista di navigazione sia BEHIND nella barra di stato) ma mi piace ancora cambiare il colore della mia barra di azione dinamicamente. Per questo motivo, il colore della barra di stato deve essere modificato in una versione più scura del mio colore della barra delle azioni.StatusBar traslucido con colore ActionBar dinamico in Android

Se si imposta la barra di stato su trasparente, come suggeriscono molte fonti, il mio colore primary_dark viene utilizzato come sfondo della mia barra di stato. Tuttavia, poiché cambierò il colore della barra delle azioni durante il runtime, primary_dark non deve necessariamente essere il colore scuro della mia barra delle azioni.

Se si imposta la barra di stato sul colore della barra delle azioni, la trasparenza è scomparsa. Se si imposta la barra di stato sul colore della barra delle azioni e si aggiunge trasparenza, la barra di stato non sembra né sbagliata né a destra e la mia navigazione sovrapposta non è ancora molto "trasparente"/"colorata".

Google Inbox ha tre colori separati: Posta in arrivo (blu), Posticipata (gialla) e Fine (verde).

Cosa posso fare per ottenere questo comportamento?

risposta

10

In realtà, è abbastanza facile da implementare.

enter image description here

Primo passo - è quello di cambiare l'altezza della Toolbar:

  • cambiamento height a wrap_content

quindi per me sembra che questo:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

Poi si ignora risorse per v19:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
        <!-- Style properties --> 
        .... 
        <!-- These properties are important:--> 
        <item name="android:windowTranslucentStatus">true</item> 
        <item name="windowActionBarOverlay">false</item> 
        <item name="android:windowActionBarOverlay">false</item> 
        <item name="android:fitsSystemWindows">false</item> 
      </style> 
    </resources> 

Poi, nel Activity, impostazione padding per il Toolbar:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0); 
    ...... 
    ...... 
    public int getStatusBarHeight() { 
     int result = 0; 

     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 
      if (resourceId > 0) { 
       result = getResources().getDimensionPixelSize(resourceId); 
      } 
     } 
     return result; 
    } 

E in realtà, è praticamente esso. Ora, una volta voglio cambiare il colore della barra degli strumenti, sto chiamando questo:

if (getSupportActionBar() != null) { 
     getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.GREEN)); 
    } 

Il layout della attività:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="false" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

NB! Nelle versioni del sistema operativo pre-Kitkat, la barra di stato è rimasta la stessa, non traslucida.

Ho caricato il codice sorgente dell'applicazione di test nella mia casella personale - feel free to check it out.

Spero che aiuti

+0

Grazie Konstantin, avrò una ricerca dopo il lavoro! Tuttavia: non hai menzionato alcun codice relativo a NavigationView. NavigationView è DIETRO la barra di stato nel tuo esempio? – Frame91

+0

@ Frame91 Piacere mio! NavigationView nel mio caso è sotto la barra di stato: http://i.stack.imgur.com/B3d9G.png Hai bisogno che sia così? –

+0

Aggiornato la risposta con un collegamento all'applicazione di prova (dispone di cassetto di navigazione e pulsanti per cambiare colore) –

Problemi correlati