底部的软NavigationBar重叠我的ListView

我在Nexus 5(Android 5)上运行我的应用程序,但是我遇到了底部的软导航重叠ListView的最后一项的问题。 我试图添加fitsSystemWindows我的风格和ListView,但没有奏效。

我的布局的XML:

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

Solutions Collecting From Web of "底部的软NavigationBar重叠我的ListView"

将其添加到您的themes.xml中的值-V21目录:

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

示例(我正在使用AppCompat的actionbars):

 <style name="Theme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="homeAsUpIndicator">@drawable/new_indicator</item> <item name="android:homeAsUpIndicator">@drawable/new_indicator</item> <item name="actionModeBackground">@android:color/black</item> <item name="android:windowDrawsSystemBarBackgrounds">false</item> </style> 

这是因为你的listView的高度是相等的全屏高度,但是动作栏会将布局推低几个像素,导致布局重叠。

如果在操作栏下有全屏碎片容器,也会发生这种情况。

解决这个问题的方法是确定屏幕和操作栏的高度,然后将父视图的高度设置为不同的值。 例:

 @Override public void onWindowFocusChanged (boolean hasFocus) { LinearLayout lMain = (LinearLayout) findViewById(R.id.lMain); lMain.getLayoutParams().height = lMain.getHeight() - getNavigationBarHeight(); } 
  • 在布局已经被绘制/渲染之后,你必须这样做。 在onCreate或onResume为时尚早。 在onWindowFocusChanged()中这样做可能只是过度杀伤,但它的工作原理。

我在这篇文章中尝试了被接受的答案,就像很多不适合我的。

但是下面的工人对我来说。

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

我放在styles-21.xml中

什么是使软导航栏有一个坚实的背景,不知何故现在组件被正确渲染。