无法从未升高的透明 FloatingActionButton 中移除“阴影”

Ant*_*ell 1 android shadow material-design floating-action-button android-elevation

在花了几个小时研究这个问题后,我决定提出问题,而不是在这样一个(看似)简单的任务上浪费更多时间。

我正在尝试实现一个带有透明背景且没有 Broder 的 FloatingActionButton,以仅显示一个自定义图标。我知道材料设计不鼓励它,但我需要这样做。

我面临的问题是有阴影显示,这是我不想要的。由于我将高程设置为 0dp,我不知道它是如何到达那里的,因此我不知道如何将其删除。

有背景的 FAB 没有背景但有阴影的FAB

这是包含 FAB 的片段的代码:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_sample"
android:elevation="0dp"
android:fitsSystemWindows="true">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/fragment_grid"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:gravity="center"
        android:padding="10dp"
        android:stretchMode="columnWidth"
        android:verticalSpacing="25dp"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        style="@style/AppTheme"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center"
        android:layout_marginBottom="@dimen/activity_vertical_margin"
        android:adjustViewBounds="true"
        android:elevation="0dp"
        android:fitsSystemWindows="true"
        android:scaleType="fitCenter"
        app:borderWidth="0dp"
        app:fabSize="normal"
        app:layout_anchorGravity="bottom|center"
        app:layout_behavior="ScrollAwareFABBehavior"
        />

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的 AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:fitsSystemWindows">true</item>
    <item name="android:spotShadowAlpha">0</item>
    <item name="android:shadowRadius">0</item>
    <item name="android:ambientShadowAlpha">0</item>
    <item name="selectableItemBackgroundBorderless">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我在其中设置透明性的 Fragment 的 onCreateView:

@Override
public final View onCreateView(final LayoutInflater inflater, final ViewGroup container,
                               final Bundle savedInstanceState) {
    // initialize variables
    View view = inflater.inflate(R.layout.fragment_desk, container, false);

    coordinatorLayout = (CoordinatorLayout) view.findViewById(R.id.fragment_layout);
    fab = (FloatingActionButton) coordinatorLayout.findViewById(R.id.fab);
    fab.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);

    return view;
}
Run Code Online (Sandbox Code Playgroud)

TL;DR:如何去除第二张图片中显示的阴影?

编辑:看来,这个问题与晶圆厂尺寸有关。我将 design_fab_size_normal 设置为 200 只是为了看看它的作用。原来它不会影响我的图标大小,但会影响阴影的大小。

FAB 大小增加到 200 显示图标

这是 dimens.xml:

<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_fab_image_size" tools:override="true">64dp</dimen>
    <dimen name="design_fab_size_normal" tools:override="true">200dp</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)

HAX*_*AXM 6

它应该是:

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

代替:

android:elevation="0dp"
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下方法从 Java 代码中执行此操作:

float zeroElevation=0.0f;
View.setElevation(zeroElevation);
Run Code Online (Sandbox Code Playgroud)