Куда поместить плавающую кнопку действия при наличии нескольких фрагментов - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь создать макет с MainActivity, который включает в себя BottomNavigationBar и FrameLayout для замены фрагментов. Я хочу, чтобы BottomNavigationBar оставался фиксированным с каждым фрагментом, имеющим потрясающий элемент, который, с другой стороны, исчезает при прокрутке. Проблема в том, что я не уверен, какой макет использовать для MainActivity и фрагментов и где разместить фаб, я мог бы поместить фаб в макет MainActivity и изменить поведение фаба для каждого фрагмента (не хотя знаете) или добавьте потрясающий элемент в макет каждого фрагмента. Когда я делаю последнее, я не могу ссылаться на нижнюю панель MainActivity, чтобы остаться над ней.

Я попробовал # 1: MainActivity:

 <CoordinatorLayout>
 <FrameLayout/>
 <BottomNav/>
 <FAB/>
 </CoordinatorLayout>

И № 2:

 <CoordinatorLayout>
 <FrameLayout/> -> fabs defined in each fragment layout
 <BottomNav/>
 </CoordinatorLayout>

XML-файл My Main activites выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/bottom_navigation"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_navigation"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

И один из моих фрагментов с FAB:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".View.MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/note_item"
        android:layout_gravity="top" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/button_add_note"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_marginBottom="64dp"
        android:layout_marginEnd="16dp"
        android:src="@drawable/ic_add"
        app:layout_anchor="@id/recycler_view"
        app:layout_anchorGravity="bottom|right|end"/>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Я хочу, чтобы нижняя навигация и расположение координаторов были осведомлены о том, что fab и fab должны быть выше нижней навигации, без использования жестко заданных значений dp, но как мне это сделать?

1 Ответ

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

Если вы хотите использовать логику CoordinatorLayout.Behavior, ваш fab должен находиться на одном уровне с CoorditorLayout.

Для вас я рекомендую эту логику: действие содержит BottomNavigation, FrameLayout (контейнер фрагмента). Тогда весь ваш фрагмент содержит:

 <CoordinatorLayout>
 <RecyclerView/>
 <FloatingButton/>
 </CoordinatorLayout>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...