Android:错误位置的浮动操作button

我有两个我的片段布局浮动行动button,有时他们移动到错误的位置,虽然我使用CoordinatorLayout。

这是它应该看起来

这是我打开片段时的样子

这是我的片段的代码:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/notes_layout" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragments.NotesFragment"> <android.support.v7.widget.RecyclerView android:id="@+id/notes_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/new_note_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:clickable="true" android:src="@drawable/ic_add_black_48dp" app:layout_anchor="@id/notes_layout" app:layout_anchorGravity="bottom|center" android:onClick="openNewNote"/> </android.support.design.widget.CoordinatorLayout> 

有没有人有一个想法,为什么FAB有时移动到错误的位置?

Solutions Collecting From Web of "Android:错误位置的浮动操作button"

我遇到了同样的问题。 问题是与app:layout_anchor和com.android.support.design:24.2.0+的组合

我能够通过从工厂移除应用程序:layout_anchor属性或通过恢复到旧版本的devise库来解决此问题。 24.1.1为我工作得很好。 我也必须将我的appcompat v7库恢复到24.1.1。

我希望这有帮助。

尝试使CoordinatorLayout的FAB第一个孩子

CoordinatorLayout.LayoutParams类具有anchorGravity字段。 例如:

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); lp.anchorGravity = Gravity.BOTTOM | GravityCompat.START; fab.setLayoutParams(lp); 

在我的情况下,这是从24.2.0及以上的支持库中的错误。 所以,解决这个问题的唯一方法就是使用支持lib v24.1.1构build应用程序。

 try this: <android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rvToDoList" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v7.widget.RecyclerView> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" android:src="@mipmap/ic_launcher" app:layout_anchor="@id/rvToDoList" app:layout_anchorGravity="bottom|right|end"/> </android.support.design.widget.CoordinatorLayout> 

这些build议都没有结束为我工作(降级不是一个选项;移动的FAB,所以这是第一个孩子使它在Android 14隐形;去除layout_anchor使它跳转到一个随机的位置)

我改为使用ConstraintLayout在我想要的两个视图之间手动定位FAB。 由于我的整个屏幕没有滚动区域,工作正常。

要这样定位FAB,请将其顶部和底部约束设置为它应该重叠的上部视图之一的底部,并确保它是ConstraintLayout中的最后一个子项。

把FAB放在一个RelativeLayout里面,它对我有效,我使用支持库的版本25.3.1