如何固定"浮动动作按钮"正确使用CoordinatorLayout?

时间:2015-08-21 11:30:11

标签: android android-layout material-design floating-action-button android-coordinatorlayout

我使用CoordinatorLayout作为我的根视图。它包含RelativeLayoutFloatingActionButton。当我为layout_anchor设置layout_anchorGravityFloatingActionButton时,它不会像我预期的那样位于RelativeLayout(屏幕上的橙色区域)的边缘。

我尝试了这个问题的解决方案How can I add the new "Floating Action Button" between two widgets/layouts,但没有成功。

这是我的布局:

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/primary_area"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/primary"
        android:paddingBottom="30dp">

        <com.vocabularyminer.android.android.view.view.FloatingEditText
            android:id="@+id/edittext_package_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="32dp"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            android:layout_marginTop="16dp"
            android:hint="Test fab button"/>

    </RelativeLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@drawable/ic_done_white_24dp"
        app:elevation="4dp"
        app:layout_anchor="@id/primary_area"
        app:layout_anchorGravity="bottom|right|end"/>

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

结果屏幕: Result screen according to the layout file above

我的预期:

enter image description here

2 个答案:

答案 0 :(得分:0)

我习惯通过此代码自行锚定,以添加主视图的addOnLayoutChangeListener侦听器:

// fabGap is the right margin from the CoordinatorLayout
// container is your CoordinatorLayout  

final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.TOP);
    layoutParams.setMargins(mAppBarLayout.getRight() - (2 * fabSize) - (2 * fabGap), mAppBarLayout.getBottom() - (fabSize / 2), 0, fabPadding);

    mFavoriteActionButton = new FloatingActionButton(getActivity());

答案 1 :(得分:0)

我发现了我的问题。此问题的解决方案:How can I add the new "Floating Action Button" between two widgets/layouts 正确。但我把我的片段放到了FrameLayout,它是根据这个xml:

定义的
<FrameLayout
        android:id="@+id/floating_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

因为我使用了 wrap_content ,所以FAB按钮被放置在RelativeLayout内,而不是RelativeLayout边缘的位置。

当我在 layout_heigh 参数 match_parent 中使用时,一切都按预期工作。