浮动操作按钮 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_margin
和android: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。我的猜测是您的布局或代码中未包含的其他内容导致边距更改。您是否在视图层次结构中的某处使用CoordinatorLayout
和app: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) 对底部边距没有影响的主要内容,如果未能解决你的问题,请参考以下文章