浮动操作按钮 layout_margin(Bottom) 对底部边距没有影响

Posted

技术标签:

【中文标题】浮动操作按钮 layout_margin(Bottom) 对底部边距没有影响【英文标题】:Floating Action Button layout_margin(Bottom) has no effect on bottom margin 【发布时间】:2016-06-24 02:43:36 【问题描述】:

我在 android 6.0.1 设备上进行测试,问题是我的 FAB 只对 layout_marginRight 做出反应,而对 layout_marginBottom 没有反应,无论我使用哪个值。

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_>

<ScrollView
    android:id="@+id/scrollViewUnitNames"
    android:layout_
    android:layout_
    android:layout_centerInParent="true"
    android:layout_margin="16dp"
    android:fillViewport="true"><!----></ScrollView>

<android.support.design.widget.FloatingActionButton
    android:layout_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_margin="@dimen/fab_margin"
    android:clickable="true"
    android:id="@+id/fab"
    android:src="@android:drawable/ic_dialog_email"
    app:fabSize="normal"
    app:borderWidth="0dp"
    />      </RelativeLayout>

因此,如果我将 FAB 对齐到左上角或右上角,则边距有效。 如果我将它对齐到左下角或右下角,layout_marginBottom 似乎没有效果。 我正在使用设计支持库 23.2.0。 我在 Android 4.0.3 模拟器上对其进行了测试,并且可以正常工作。 你有任何想法如何解决这个问题吗?谢谢!

编辑如下所示:

编辑 2 我现在知道的更多:在创建时,我将内容视图设置为空布局(内部只有一个相对布局)。经过一些测试,我改变了这样的布局:

RelativeLayout container = (RelativeLayout) findViewById(R.id.container);
container.removeAllViews();
container.addView(getLayoutInflater().inflate(R.layout.my_layout_file, null));

在一个新项目中,我做了同样的事情,在我改变布局之前它工作了,在我改变它之后,它看起来和上图一样。这是更改布局的不正确方法吗?或者有没有更好的方法?感谢您的帮助。

【问题讨论】:

我已经在运行 sdk 23 的 Nexus 6 模拟器上尝试过这种布局,它似乎工作正常。 是的,请阅读接受的答案。 【参考方案1】:

FloatingActionButton 的 xml 更改为如下内容:

<android.support.design.widget.FloatingActionButton
      android:layout_
      android:layout_
      android:layout_alignParentRight="true"
      android:layout_alignParentBottom="true"
      android:layout_marginLeft="@dimen/fab_margin"
      android:layout_marginTop="@dimen/fab_margin"
      android:layout_marginRight="@dimen/fab_margin"
      android:layout_marginBottom="50dp"
      android:clickable="true"
      android:id="@+id/fab"
      android:src="@android:drawable/ic_dialog_email"
      app:fabSize="normal"
      app:borderWidth="0dp"
      />

如果您使用android:layout_marginandroid:layout_marginBottom,它将覆盖您的底部边距。单独定义每个边距将允许您拥有与上/左/右不同的下边距。

更新答案:

改变这一行:

container.addView(getLayoutInflater().inflate(R.layout.my_layout_file, null));

container.addView(getLayoutInflater().inflate(R.layout.my_layout_file, container, false));

它应该更正FloatingActionButton 上的边距。

【讨论】:

我不希望底部的边距与右边距不同。我只是在测试它是否适用于不同的位置,我发现只有底部边距似乎不起作用。这就像 layout_marginBottom 总是为零。 你能张贴你看到的截图吗?我复制粘贴了您的布局,并且底部/右侧边距都受到尊重。 将你的布局xml复制粘贴到一个测试项目中,并用LinearLayout填充LinearLayout填充TextViews,得到this。我的猜测是您的布局或代码中未包含的其他内容导致边距更改。您是否在视图层次结构中的某处使用CoordinatorLayoutapp:layout_behavior 但是在滚动视图中,我添加了一个垂直线性布局,并且在这个布局中,我使用这个复选框和文本视图添加了许多水平线性布局。 非常感谢!但这是改变布局的好方法,对吧?【参考方案2】:

在布局底部添加这个视图

    <View
        android:id="@+id/bottomView"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"/>

并在此视图上设置浮动操作按钮

    android:layout_above="@id/bottomView"

【讨论】:

以上是关于浮动操作按钮 layout_margin(Bottom) 对底部边距没有影响的主要内容,如果未能解决你的问题,请参考以下文章

在 ListView 顶部包含浮动操作按钮

使用 Android 设计支持库中的浮动操作按钮的浮动操作菜单实现 [关闭]

在模拟器上找不到浮动操作按钮

使用浮动操作按钮更改图标颜色

在 Flutter 中定位两个浮动操作按钮

如何更改浮动操作按钮的颜色?