ViewGroup中clipChildren属性的用法

来自ViewGroup中的属性clipChildren用于定义一个子元素是否被限制在其父元素中进行绘制。通常用于动画效果中绘制需要超出原有尺寸限制的元素时使用。在这种情况下,需要将该属性值设置为false以确保该元素可以超出边界。缺省值为true,也即子元素不可以超出父元素的边界。

需要重点注意的是,属性值clipChildren需要被设置到爷爷节点上。

以下为布局的示例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:clipChildren="false"
    android:orientation="vertical">

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:orientation="horizontal">

        <ImageView
            android:src="@drawable/ic_launcher"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <ImageView
            android:src="@drawable/ic_launcher"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <ImageView
             android:src="@drawable/ic_launcher"
            android:layout_width="0dp"
            android:layout_height="96dp"
            android:layout_gravity="bottom"
            android:layout_weight="2"/>

        <ImageView
            android:src="@drawable/ic_launcher"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <ImageView
            android:src="@drawable/ic_launcher"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

    </LinearLayout>

</LinearLayout>

重点关注根节点的属性android:clipChildren="false"和第三个ImageView的属性android:layout_gravity="bottom",最终效果如下所示:

clipChildren效果

而去除第三个ImageView的属性android:layout_gravity="bottom"后的效果为:

layout_gravity未设置

可以看到,默认顶部对齐,最终只显示了一部分。

只去除根节点的属性android:clipChildren="false"后显示如下:

clipChildren未设置

三张图片对比,可以很容易看出该属性值的作用。