Android 上低于 5.0 的 FloatingActionButton 布局边距不正确

Incorrect FloatingActionButton layout margins on Android that's below 5.0

不明白为什么我的浮动操作按钮的边距是 32dp 而不是 16dp?

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/fab"
    android:src="@drawable/ic_add_24"
    android:layout_gravity="bottom|end"
    android:layout_marginRight="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="16dp"/>

在 Android 5.0(模拟器)上一切正确,但在 Android 4.3(真实设备)上边距太大。尽管根布局没有填充或边距。
P.S。来自 Google 设计库的 FloatActionButton。

显然实现此目的的唯一方法是使用 API 特定的样式。在你的正常 values/styles.xml 中,输入如下内容:

<style name="floating_action_button">
<item name="android:layout_marginLeft">0dp</item>
<item name="android:layout_marginTop">0dp</item>
<item name="android:layout_marginRight">8dp</item>
<item name="android:layout_marginBottom">0dp</item>

然后在values-v21/styles.xml下使用:

<style name="floating_action_button">
<item name="android:layout_margin">16dp</item>

最后,将样式应用于您的 FloatingActionButton:

<android.support.design.widget.FloatingActionButton
...
style="@style/floating_action_button"
...
/>

正如 Zielony 所指出的,在 API <20 中,按钮呈现自己的阴影,这增加了视图的整体逻辑宽度,而在 API >=20 中,它使用不影响视图宽度的新高程参数。