2014-12-31 4 views
9

Ich habe meine App auf einem Nexus 5 (Android 5) ausgeführt, aber ich stieß auf das Problem, dass die weiche Navigationsleiste am unteren Rand das letzte Element meiner ListView überlappt. Ich habe versucht, fitsSystemWindows zu meinem Stil und der ListView hinzuzufügen, aber das hat nicht funktioniert.Bottom soft NavigationBar überlappt mein ListView

Die XML mein Layouts:

<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

Auf welche Navigationsleiste beziehen Sie sich? Ist deine Aktivität im Vollbildmodus? –

+0

Die Soft-Navigationsleiste mit den Schaltflächen Zurück, Home und Optionen. http://bit.ly/1vLpHSp –

+0

Wenn ich einen Rand hinzufügen, habe ich ein Problem mit Geräten ohne Soft-Navigation-Tasten. –

Antwort

28

dies in einem Werte-v21 dir zu deinem themes.xml hinzufügen:

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

Beispiel (ich verwende AppCompat für Action):

+1

omg endlich !!! – rupps

+0

ich benutze AppTheme.NoActionBar und dieses funktioniert nicht! irgendeine andere Idee? –

+0

gleich mit mir ... Ich benutze auch NoActionBar und das hat nicht funktioniert ... keine Ahnung? – sgupta

0

Es ist, weil die Höhe Ihrer ListView ist gleiche Vollbildhöhe, aber Action-Bar schiebt layou t ein paar Pixel niedriger, was zu einer Überlappung des Layouts durch Navigationsschaltflächen führt.

Dies geschieht auch, wenn Sie einen Vollbildfragment-Container unter Aktionsleiste haben.

Fix für dies ist die Höhe des Bildschirms und der Aktionsleiste zu messen, und dann Höhe der übergeordneten Ansicht auf den Unterschied einzustellen. Beispiel:

@Override 
public void onWindowFocusChanged (boolean hasFocus) { 
    LinearLayout lMain = (LinearLayout) findViewById(R.id.lMain); 
    lMain.getLayoutParams().height = lMain.getHeight() - getNavigationBarHeight(); 
} 
  • Sie haben dies nach dem Layout zu tun, ist bereits gezeichnet/gemacht. In onCreate oder onResume ist zu früh. Wenn Sie dies in onWindowFocusChanged() tun, ist das vielleicht ein kleiner Overkill, aber es funktioniert.
0

Ich versuchte die angenommene Antwort in diesem Beitrag und wie viele es für mich nicht funktioniert hat.

Allerdings der folgende Arbeiter für mich.

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

legte ich es in verschiedenen Schnitten-21.xml

Was tut, ist die weiche Navigationsleiste machen einen soliden Hintergrund haben und irgendwie jetzt Komponenten korrekt wiedergegeben werden.