55

标题很自我解释。

以下代码不会在浮动操作按钮下方呈现阴影。可以做些什么来渲染阴影?即使在 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 上添加阴影。

示例截图

dandar3 示例截图: https ://github.com/dandar3/android-support-design

4

6 回答 6

92

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

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

这个问题应该在下一个版本的 android 设计库中修复。

于 2015-05-29T21:05:24.990 回答
33

对于 API 21+,您需要设置app:borderWidth="0dp"app:elevation="[number]dp". 设置高度,您将给出所需的阴影大小:

参数值示例

以下是 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 的 API(Android 4)要记住的一件重要事情是,为了兼容性,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 的开头,但我放在那里只是为了提醒您;]

于 2015-06-10T09:44:24.263 回答
6

我遇到了同样的问题,我通过从我的 AndroidManifest.xml 中删除这个标签来让它工作。

android:hardwareAccelerated="false"

我最初将它与 一起添加android:largeHeap="true",因为我认为我需要它用于显示大量点的 HeatMap,但后来我意识到它可以与android:largeHeap="true".

于 2017-03-13T11:47:35.467 回答
5

检查应用程序标记中项目或库中的清单并删除它们

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

但是如果您需要这些选项,那么阴影和变换动画将不起作用

于 2016-12-16T03:56:48.120 回答
5

如果这仍然对某些人不起作用,则以下之间存在显着差异:

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

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

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

于 2016-05-10T23:54:15.190 回答
0

如果有帮助,我正在使用

android:tint="@color/myColor"

代替

android:backgroundTint="@color/myColor".

用 backgroundTint 替换 tint 带回了阴影。

于 2018-09-09T21:05:27.237 回答