底部对齐浮动操作按钮

53

我想将我的FAB对齐到右下角。

  1. 我尝试使用 android:gravity="bottom|right"
  2. 当我尝试使用 android:layout_alignParentBottom="true" 时,FAB 消失了
  3. 当我尝试使用 android:layout_alignBottom="@id/lista_tiendas" 时,FAB 消失了

这似乎不是很复杂,但我却无法实现它。

有任何想法吗?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

<ListView
    android:id="@+id/lista_tiendas"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:divider="@android:color/transparent"
    android:dividerHeight="4.0sp"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_add_white_48dp"
    app:backgroundTint="@color/spg_rosa"
    app:borderWidth="0dp"
    app:elevation="8dp"
    app:fabSize="normal"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="@id/lista_tiendas"
     />
</RelativeLayout>
7个回答

171

对于 RelativeLayout

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    ... />

对于 CoordinatorLayout,您应该使用 android:layout_gravity="end|bottom"


对于 ConstraintLayout

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    ... />

查看此回答以获取更多信息。


2
是的,我已经修正了代码格式,现在RelativeLayout显示出来了!谢谢。 - Juliatzin
这个对我也起作用了,谢谢!为什么LinearLayout不能在FAB上工作? - Michael
3
建议使用:android:layout_alignParentEnd = "true"意思是将该视图的右侧与其父视图的右侧对齐。 - Zon
太棒了。感谢 @AnggrayudiH - Pamungkas Jayuda
我想在FAB上使用它,当点击时,我想禁用背景片段。但是当我使用clickable=true时,即使FAB已关闭,片段也无法工作。我稍微修改了一下,在Java类中使用它,如果FAB打开,则clickable为true,否则为false。它很好地工作了,感谢您的解决方案。 - Asesha George
显示剩余2条评论

12

布局应该采用 RelativeLayout。请尝试以下代码:

<RelativeLayout 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">

<LinearLayout
    android:id="@+id/ly_list_form"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">


    <ListView
        android:id="@+id/list_forms"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:dividerHeight="1dp" />

</LinearLayout>

<LinearLayout
    android:id="@+id/ly_bar_bottom"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="right"
    android:orientation="horizontal">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/button_addc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="28dp"
        android:src="@drawable/ic_add"
        app:borderWidth="0dp"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp" />
</LinearLayout>

将浮动按钮包装在线性布局中对我很有帮助,否则它会忽略边距。 - Alaa M.

5
似乎FloatingActionButton在RelativeLayout中的位置不正确。我将RelativeLayout更改为FrameLayout,问题解决了!希望有所帮助!
<ListView
    android:id="@+id/mylist"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:divider="@android:color/transparent"
    android:dividerHeight="1.0sp" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|bottom"
    android:src="@drawable/ic_add_white_48dp"
    app:backgroundTint="@color/spg_rosa"
    app:borderWidth="0dp"
    app:elevation="8dp"
    app:fabSize="normal" />

</FrameLayout>

5
尝试使用 android.support.design.widget.CoordinatorLayoutandroid:layout_gravity="bottom|right",对我来说很有效。

2
我通过以下方式使代码正常运行:

我能够通过这种方式使代码正常工作:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:backgroundTint="#ff0000"
    app:borderWidth="0dp"
    app:elevation="8dp"
    app:fabSize="normal"
    android:layout_alignLeft="@+id/text"
    android:layout_above="@+id/text"/>

然而,当将TextView放在下面而不是上面时,它没有起作用,我认为这可能是一个错误。

好的,但是我没有一个TextView,我有一个占据整个屏幕的ListView,所以如果我把它放在上面,我就不会得到想要的位置! - Juliatzin

1

使按钮位于相对布局的底部和中心位置

将以下两行代码添加到您的 floatingactionbutton 容器中

    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"

输出将会是: 像这样


这个问题需要右下对齐。水平居中无法实现这一点。 - Mohit Ajwani

1

尝试

android:layout_gravity="bottom|right"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接