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

Posted

技术标签:

【中文标题】android支持设计库提供的FAB如何添加阴影?【英文标题】:How to add shadow to the FAB provided with the android support design library? 【发布时间】:2015-08-12 12:20:09 【问题描述】:

标题很自我解释。

以下代码不会在浮动操作按钮下方呈现阴影。可以做些什么来渲染阴影? API 21+ 是否真的不支持此功能?

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

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

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

【问题讨论】:

至少 21 岁以上,这可能适用:***.com/questions/27080338/… 我考虑过的东西,但删除 StateListAnimator 不会带回阴影。这可能是因为 FAB 实际上是扩展的 ImageView 而不是 Button。奇怪,因为 FAB 实际上有一个 StateListAnimator。 【参考方案1】:

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

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

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

【讨论】:

哇,这确实有效……奇怪的行为。我无法想象这是预期的行为。 @Thorinside 这是一个错误,一个方形错误:code.google.com/p/android/issues/detail?id=175067【参考方案2】:

对于 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_
    android:layout_
    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_
    android:layout_
    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 的开头,但我放在那里只是为了提醒您;]

【讨论】:

对我不起作用。我在地图视图上方设置了 FAB,但我的 FAB 上没有出现 fcking 阴影【参考方案3】:

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

android:hardwareAccelerated="false"

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

【讨论】:

【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

【参考方案6】:

如果有帮助,我正在使用

android:tint="@color/myColor"

而不是

android:backgroundTint="@color/myColor".

用 backgroundTint 替换 tint 带回了阴影。

【讨论】:

以上是关于android支持设计库提供的FAB如何添加阴影?的主要内容,如果未能解决你的问题,请参考以下文章

Android L FAB 按钮阴影

Android设计支持库可扩展的浮动操作按钮(FAB)菜单

如何使用支持库 23 修复缩放的 FloatingActionButton 上的阴影

Fab按钮带有显示阴影的图标(Android 4.1)

Android L - 浮动操作按钮 (FAB)

如何将页脚添加到 NavigationView - Android 支持设计库?