Android XML:阴影切断

时间:2016-11-02 10:35:57

标签: android xml 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>

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

Bottom and right side of shadow cut off

2 个答案:

答案 0 :(得分:17)

在相对布局代码中,使用填充而不是边距,并添加属性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">

答案 1 :(得分:0)

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

android:clipChildren
<块引用>

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

android:clipToPadding
<块引用>

定义 ViewGroup 是否将裁剪其子项并调整(但不裁剪)任何 EdgeEffect 到其内边距(如果内边距不为零)。

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

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

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