Intereting Posts
Можно ли использовать рефлексию с методами, которые больше чем минимальные sdk? Android BLE не может получать уведомления Gatt с устройства Отображение всех символов Unicode в TextView Как использовать собственный вид в макете? Страница веб-просмотра Android не загружается правильно Почтовый многопользовательский запрос с Android SDK Gradle – применить конфигурацию ко всем проектам с помощью плагина Есть ли способ получить видимую строку или диапазон видимых строк TextView? Пользовательский словарь (не клавиатура) для Android-приложений Удаление элемента AndroidManifest с использованием продуктов с градиентом Отображение объявления внизу без перекрытия списка Play Youtube HTML5 встроенное видео в Android WebView Does cursor.getString () принуждает int в строку? Ошибка: типы строк не разрешены (в 'screenOrientation' со значением 'sensorPortait') Как развернуть приложение Android на устройство?

Нижняя мягкая навигационная панель перекрывает мой 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> 

Добавьте это в свои темы. Xml в каталоге значений-v21:

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

Пример (я использую AppCompat для панелей действий):

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

Это потому, что высота вашего спискаView равна высоте полного экрана, но панель действий отталкивает макет на несколько пикселей ниже, что приводит к перекрытию макета с помощью кнопок навигации.

Это также происходит, если в панели действий есть полноэкранный фрагмент.

Исправить это, чтобы измерить высоту экрана и панели действий, а затем установить высоту вашего родительского представления в зависимости от его разницы. Пример:

 @Override public void onWindowFocusChanged (boolean hasFocus) { LinearLayout lMain = (LinearLayout) findViewById(R.id.lMain); lMain.getLayoutParams().height = lMain.getHeight() - getNavigationBarHeight(); } 
  • Вы должны сделать это после того, как макет уже нарисован / отображен. В onCreate или onResume слишком рано. Это можно сделать в onWindowFocusChanged (), возможно, слишком много, но это работает.