在CoordinatorLayout内部使用FloatingActionButton的BottomNavigationView不匹配位置

时间:2017-12-04 19:24:09

标签: android android-coordinatorlayout

我想在滚动时隐藏我的底栏,但FAB应保留在屏幕上。

如果我使用锚点将FAB放在BottomNavigationView之上,但它会出现在它后面。

如果我将layout_insetEdge="bottom"添加到BottomNavigationView,那么它可以正常运行但我的测试失败(https://issuetracker.google.com/issues/70162122),所以我暂时无法使用它。

enter image description here

布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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:id="@+id/mainLayout"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:fitsSystemWindows="true"
  tools:context=".screens.main.MainActivity">

  <FrameLayout
    android:id="@+id/mainContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/scrolling_view_behaviour" />

  <android.support.design.widget.FloatingActionButton
    android:id="@+id/mainNewQuestionButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/spacing_8dp"
    app:layout_anchor="@+id/mainBottomNavigationView"
    app:layout_anchorGravity="top|right|end"
    app:srcCompat="@drawable/create_question"
    tools:visibility="visible" />

  <android.support.design.widget.BottomNavigationView
    android:id="@+id/mainBottomNavigationView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:itemBackground="@color/my_gray"
    app:itemIconTint="@drawable/selector_bottombar_item"
    app:itemTextColor="@drawable/selector_bottombar_item"
    app:layout_anchor="@id/mainContainer"
    app:layout_anchorGravity="bottom"
    app:layout_behavior="@string/hide_bottom_navigation_view_behaviour"
    app:menu="@menu/bottom_navigation_main" />

</android.support.design.widget.CoordinatorLayout>

2 个答案:

答案 0 :(得分:1)

您似乎在这里遇到Z-Ordering问题。 您可以尝试fab.bringToFront(),然后fab.invalidate(),以便api低于21,而ViewCompat.setZ(fab, someFloat)则高于21。

我使用这些方法将一个自定义FloatingActionMenu(由我为项目编写的一系列FAB组成)放到前面,这样它们就会重叠屏幕上的所有内容。

答案 1 :(得分:0)

只需使用:

<androidx.coordinatorlayout.widget.CoordinatorLayout>

 <com.google.android.material.bottomnavigation.BottomNavigationView
      android:id="@+id/bottom_navigation"
      android:layout_gravity="bottom"
      .../>

  <com.google.android.material.floatingactionbutton.FloatingActionButton
      android:layout_gravity="top"
      app:layout_anchor="@id/bottom_navigation"
      app:layout_anchorGravity="top|end"
      />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

enter image description here