Панель инструментов в неправильном месте на BottomNavigationView
Я создаю приложение, и когда я загружаю представление с BottomNavigationView
, У меня постоянно возникают странные проблемы, иногда у меня появляется лишний пробел, а иногда - неправильно расположена панель инструментов, например:
С нижней навигацией:
Без нижней навигации:
Это мой код для 1-го изображения:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@menu/toolbar_recipe" />
<FrameLayout
android:id="@+id/content_frame"
android:layout_height="0dp"
android:layout_weight="1"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_nav_menu"
app:labelVisibilityMode="unlabeled"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/bottom_nav_color"
app:itemTextColor="@color/bottom_nav_color" />
</LinearLayout>
</RelativeLayout>
Панель инструментов:
<?xml version="1.0" encoding="UTF-8" ?>
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar_recipe"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/ToolBarStyle"
android:minHeight="?android:attr/actionBarSize"
android:background="@color/colorPrimary"/>
И вот как он ведет себя с CoordinatorLayout
после того, как я установил paddingTop как ?attr/actionBarSize
FrameLayout
переместил немного места, но он все еще неправильно расположен.
С CoordinatorLayout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@android:color/white"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:layout_above="@+id/bottom_navigation">
<include
layout="@menu/toolbar_recipe" />
<FrameLayout
android:id="@+id/content_frame"
android:paddingTop="?attr/actionBarSize"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_nav_menu"
app:labelVisibilityMode="unlabeled"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/bottom_nav_color"
app:itemTextColor="@color/bottom_nav_color" />
</RelativeLayout>
Без этого дополнения он просто остается позади. Я работаю в Android 8+, но я не думаю, что это проблема, и у меня нет идей, как скоординировать эту ситуацию. Кто-нибудь испытывал это?
Спасибо за любой комментарий, особенно почему это происходит, так как я не могу этого понять.
1 ответ
Я нашел ответ на основе этой строки:
android:fitsSystemWindows="true"
Мне нужно было добавить его к корневому элементу примерно так:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@android:color/white"
android:layout_width="match_parent"
android:fitsSystemWindows="true"
android:layout_height="match_parent">
А вот описание недвижимости:
Системные окна - это части экрана, на которых система рисует неинтерактивный (в случае строки состояния) или интерактивный (в случае панели навигации) контент.
Большую часть времени вашему приложению не нужно рисовать под строкой состояния или панелью навигации, но если вы это сделаете: вам нужно убедиться, что интерактивные элементы (например, кнопки) не скрыты под ними. Вот что дает стандартное поведение атрибута android:fitsSystemWindows="true": оно устанавливает отступ представления, чтобы содержимое не перекрывало системные окна.
Я нашел это здесь: