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

Rol*_*f ツ 53 android android-appcompat floating-action-button android-design-library

标题很自我解释.

以下代码不会在浮动操作按钮下方渲染阴影.渲染阴影可以做些什么?即使在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" />
Run Code Online (Sandbox Code Playgroud)

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

示例截图

屏幕截图取自dandar3:https: //github.com/dandar3/android-support-design

Dmy*_*lyk 92

只需设置app:borderWidth="0dp"解决这个问题给我.

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

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

  • @Thorinside这是一个方形错误:https://code.google.com/p/android/issues/detail?id = 175067 (5认同)

j_g*_*fer 32

对于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">
Run Code Online (Sandbox Code Playgroud)

对于低于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">
Run Code Online (Sandbox Code Playgroud)

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

  • 对我不起作用.我在地图视图上方设置了FAB,并且我的FAB上没有出现fcking阴影 (2认同)

小智 6

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

android:hardwareAccelerated="false"
Run Code Online (Sandbox Code Playgroud)

我最初添加了它,android:largeHeap="true"因为我认为我需要它用于一个HeatMap,其中显示了大量的点,但后来我意识到它可以正常工作android:largeHeap="true".


小智 5

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

app:elevation="6dp"
app:borderWidth="0dp"
Run Code Online (Sandbox Code Playgroud)

app:borderWidth="0dp"
app:elevation="6dp"
Run Code Online (Sandbox Code Playgroud)

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


Pan*_*ian 5

在Application标记中检查项目或库中的清单并删除它们

android:hardwareAccelerated="false"
android:largeHeap="true"
Run Code Online (Sandbox Code Playgroud)

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