Android XML:阴影切断

Van*_*ore 13 xml android dropshadow

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

<?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>
Run Code Online (Sandbox Code Playgroud)

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

阴影的底部和右侧切断

Lew*_*ary 24

在相对布局标记中,使用填充而不是边距并添加属性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">
Run Code Online (Sandbox Code Playgroud)

  • 哦,因为 layout_margin!我已经更新了我的答案 (2认同)

Mic*_*551 5

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

android:clipChildren
Run Code Online (Sandbox Code Playgroud)

定义子级是否限制在其边界内绘制。

android:clipToPadding
Run Code Online (Sandbox Code Playgroud)

定义 ViewGroup 是否将裁剪其子级,并在填充不为零的情况下调整(但不裁剪)任何 EdgeEffect 的大小。

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

<item name="android:clipChildren">false</item>
<item name="android:clipToPadding">false</item>
Run Code Online (Sandbox Code Playgroud)

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

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