8

voglio fare il mio navigation bar traslucido, così ho fatto qualche cosa come questa:problema con windowTranslucentNavigation

<style name="BlueToolBar" parent="Theme.AppCompat"> 
    <item name="windowActionBar">false</item> 
    <item name="android:colorBackground">@color/action_blue</item> 
    <item name="colorPrimary">@color/action_blue</item> 
    <item name="colorPrimaryDark">@color/status_bar</item> 
    <item name="android:windowTranslucentNavigation">true</item> 
</style> 

e si sta lavorando bene, ma la mia barra degli strumenti e la barra di stato sono fusi, merged toolbar

quando uso questo:

<style name="BlueToolBar" parent="Theme.AppCompat"> 
    <item name="windowActionBar">false</item> 
    <item name="android:colorBackground">@color/action_blue</item> 
    <item name="colorPrimary">@color/action_blue</item> 
    <item name="colorPrimaryDark">@color/status_bar</item> 
</style> 

il resualt è:

nice toolbar

risposta

7

<item name="android:windowTranslucentNavigation">true</item> non solo rende il traslucido Navigationbar, causa anche l'attività in corso di elaborazione dietro la barra di stato.

Per aggirare questo è possibile impostare un margine nella parte superiore della barra degli strumenti.

Come l'altezza della barra di stato può essere fatta tramite:

public static int getStatusBarHeight(Context context) { 
    int result = 0; 
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); 
    if (resourceId > 0) { 
     result = context.getResources().getDimensionPixelSize(resourceId); 
    } 
    return result; 
} 

Ora impostare il margine per la barra degli strumenti tramite questo (se la vostra barra degli strumenti è in un LinearLayout):

((LinearLayout.LayoutParams) toolbar.getLayoutParams()).setMargins(0, getStatusBarHeight(this), 0, 0); 
11

c'è una soluzione migliore:

basta impostare android:fitsSystemWindows="true" per l'xml del layout principale. il sistema si occuperà di impostare il corretto paddingTop