Android XML: 阴影切断

Android XML: Drop shadow cut off

我有一个带有边距的相对布局和一个嵌套在该布局中的浮动操作按钮。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="@dimen/activityMargin"
            android:orientation="vertical"
            android:clipToPadding="false">


<android.support.design.widget.FloatingActionButton
    android:id="@+id/id_FABSave"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    app:srcCompat="@drawable/ic_save_white"/>

</RelativeLayout>

正如您在附图中看到的那样,浮动操作按钮的阴影被切掉了。这是怎么发生的,如何解决?

在你的相对布局标签中,使用 padding 而不是 margin 并添加属性 android:clipToPadding="false" 以避免阴影被剪切。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="@dimen/activityMargin"
        android:clipToPadding="false">

问题是阴影被视图或视图组的边界切割。要解决此问题,您必须使用:

android:clipChildren

Defines whether a child is limited to draw inside of its bounds or not.

android:clipToPadding

Defines whether the ViewGroup will clip its children and resize (but not clip) any EdgeEffect to its padding, if padding is not zero.

问题是如果你想渲染阴影,你必须在 xml 中将它设置为许多视图。我在 themes.xml 级别解决了这个问题。在我的顶级主题中,我刚刚设置:

<item name="android:clipChildren">false</item>
<item name="android:clipToPadding">false</item>

然后,如果屏幕上有 space,则渲染阴影。我希望它不会破坏其他东西。

编辑: 它打破了一些观点。例如 CameraPreview 会将黑色背景设置为整个屏幕。小心滚动视图等