如何在Android支持设计库提供的FAB中添加阴影?

时间:2015-05-29 14:59:35

标签: android floating-action-button android-design-library appcompat-v7-r22.2

标题非常自我解释。

以下代码不会在浮动操作按钮下方渲染阴影。渲染阴影可以做些什么?即使在API 21 +上也不支持此功能吗?

<android.support.design.widget.FloatingActionButton
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/ic_add"
    android:clickable="true" />

注意:添加android:elevation不会在API 21上添加阴影。

Example screenshot

dandar3从示例中截取的屏幕截图: https://github.com/dandar3/android-support-design

5 个答案:

答案 0 :(得分:92)

只需设置app:borderWidth="0dp"即可解决此问题。

注意:不要忘记将xmlns:app="http://schemas.android.com/apk/res-auto"添加到您的根布局。

这个issue应该在Android设计库的下一个版本中修复。

答案 1 :(得分:31)

对于API 21+,您需要设置app:borderWidth="0dp"app:elevation="[number]dp"。设置高程,你给出了你想要的阴影大小:

Example of values for parameter "elevation"

以下是API 21 +的代码示例:

<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/locate_user_FAB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/location_off"
    app:elevation="6dp"
    app:borderWidth="0dp"
    android:layout_above="@+id/take_taxi_FAB"
    app:backgroundTint="@color/colorAccentGrey">

对于低于21(Android 4)的API,要记住的一个重要事项是兼容性条款FAB会在按钮周围设置边距以绘制阴影。然后你应该做那样的事情(我目前正在使用这段代码并且有效):

<android.support.design.widget.FloatingActionButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/locate_user_FAB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/location_off"
    app:elevation="6dp"
    app:borderWidth="0dp"
    android:layout_above="@+id/take_taxi_FAB"
    android:layout_alignParentRight="true"
    android:layout_marginRight="@dimen/map_FAB_marginRight"
    android:layout_marginBottom="@dimen/locate_user_FAB_marginBottom"
    app:backgroundTint="@color/colorAccentGrey">

我更喜欢将xmlns:app="http://schemas.android.com/apk/res-auto"放在XML的开头,但我只是为了提醒你;]

答案 2 :(得分:5)

如果这仍然不适合某些人,那么:

之间存在显着差异
app:elevation="6dp"
app:borderWidth="0dp"

app:borderWidth="0dp"
app:elevation="6dp"

由于某些原因,订单似乎很重要(第一个订单有效,第二个订单没有),这是来自支持库23.3.0

答案 3 :(得分:5)

检查应用程序代码中的项目或库中的清单,然后删除

android:hardwareAccelerated="false"
android:largeHeap="true"

但如果您需要这些选项,那么阴影和转换动画将无效

答案 4 :(得分:5)

我遇到了同样的问题,我通过从AndroidManifest.xml中删除此标记来实现它。

android:hardwareAccelerated="false"

我最初和android:largeHeap="true"一起添加了它,因为我认为我需要一个HeatMap,其中显示了大量的点,但后来我意识到它可以与android:largeHeap="true"一起使用。