2014-12-31 10 views
9

Ho eseguito la mia app su un Nexus 5 (Android 5) ma ho riscontrato il problema che il soft NavigationBar in basso si sovrappone all'ultimo elemento del mio ListView. Ho provato ad aggiungere fitsSystemWindows al mio stile e al ListView ma non ha funzionato.La barra di navigazione in basso si sovrappone al mio ListView

L'XML del mio layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:background="@color/sf4l" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ListView android:id="@id/android:list" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:background="@color/sf4l" /> 
</LinearLayout> 
+0

A quale barra di navigazione si riferisce? La tua attività è a schermo intero? –

+0

La barra di navigazione morbida con i pulsanti Indietro, Home e Opzioni. http://bit.ly/1vLpHSp –

+0

Se aggiungo un margine, avrò un problema con i dispositivi senza i pulsanti di navigazione. –

risposta

28

Aggiungi questo al vostro themes.xml in una dir valori-V21:

<item name="android:windowDrawsSystemBarBackgrounds">false</item> 

Esempio (sto usando AppCompat per actionbars):

+1

omg finalmente !!! – rupps

+0

sto usando AppTheme.NoActionBar e questo non funziona! qualche altra idea? –

+0

stesso con me ... Sto anche usando NoActionBar e questo non ha funzionato ... qualche idea? – sgupta

0

È perché l'altezza del tuo listView è uguale a schermo intero altezza, ma la barra di azione spinge layou pochi pixel abbassano ciò che causa la sovrapposizione del layout con i pulsanti di navigazione.

Ciò si verifica anche se si dispone di un contenitore di frammenti a schermo intero sotto la barra delle azioni.

Risolto il problema per misurare l'altezza dello schermo e della barra delle azioni, quindi impostare l'altezza della vista genitore alla sua differenza. Esempio:

@Override 
public void onWindowFocusChanged (boolean hasFocus) { 
    LinearLayout lMain = (LinearLayout) findViewById(R.id.lMain); 
    lMain.getLayoutParams().height = lMain.getHeight() - getNavigationBarHeight(); 
} 
  • quello che dovete fare questo dopo layout è già disegnato/resa. In onCreate o onResume è troppo presto. Farlo in onWindowFocusChanged() è forse eccessivo, ma funziona.
0

Ho provato la risposta accettata in questo post e come molti non ha funzionato per me.

Tuttavia il seguente lavoratore per me.

<item name="android:windowTranslucentNavigation">false</item> 

ho messo in stili-21.xml

Ciò che è non fa altro che rendere la barra di navigazione morbida ha un solido background e in qualche modo ora i componenti sono resi in modo corretto.