Как обеспечить, чтобы координаторы раскладки детей не пересекались - PullRequest
0 голосов
/ 29 декабря 2018

Я использую нижнюю панель приложения внутри макета координатора.остальная часть контента происходит от фрагмента.содержимое фрагмента покрывается нижней панелью приложения

. Поскольку я использую bottomAppBar, он должен быть внутри CoordintorLayout, и все дочерние элементы также должны быть внутри него.Вся компоновка над BottomAppBar должна заполнять пространство, напоминающее, но если я сделаю это, то виды на днище будут покрыты.Как мне убедиться, что представление не перекрывается с BottomAppBar

<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawerLayout_main"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".main.MainActivity">

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    android:layout_width="0dp"
    android:layout_height="wrap_content">

    </androidx.constraintlayout.widget.ConstraintLayout>

    <fragment
        android:id="@+id/fragment_main_navHost"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        android:layout_gravity="top"
        app:navGraph="@navigation/nav_graph"/>


    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottomAppBar_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:fabAlignmentMode="end"
        app:fabCradleMargin="4dp"
        app:hideOnScroll="true"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

<com.google.android.material.navigation.NavigationView
    android:id="@+id/navView_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/nav_header_layout"
    app:menu="@menu/main_navigation"/>

Что мне нужно, это убедиться, что любое содержимое, заменяющее фрагмент, не должно быть закрыто нижней панелью приложения и должноиспользовать все пустое пространство, не используя нижнюю панель приложения.В другом мире содержимое должно быть над ним при использовании остальных пробелов и по-прежнему находиться внутри макета координатора.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Согласно документации CoordinatorLayout , ребра, в которых вид в CoordinatorLayout ожидает перекрытия с другим видом, могут быть указаны с помощью layout_dodgeInsetEdges=”bottom”.Поэтому, если ваш фрагмент перекрывается вашим BottomAppBar, вы добавляете этот атрибут к фрагменту.Вы также должны указать, что вы хотите уклониться от BottomAppBar.Это делается путем добавления layout_insetEdge=”bottom” к нему.

0 голосов
/ 19 января 2019

Попробуйте добавить app:layout_behavior="@string/appbar_scrolling_view_behavior" к фрагменту.

0 голосов
/ 17 января 2019

Просто добавьте margin в ваш контейнер фрагментов:

  <fragment
    android:id="@+id/fragment_main_navHost"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginBottom="{bottom_navigation_height}"
    android:layout_marginTop="{tool_bar_height}"
    app:defaultNavHost="true"
    android:layout_gravity="top"
    app:navGraph="@navigation/nav_graph"/>
...