美文网首页
clipToPadding和clipChildren

clipToPadding和clipChildren

作者: code希必地 | 来源:发表于2020-05-23 23:30 被阅读0次

clipToPadding用于解决View的滚动问题

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#2262"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:paddingTop="16dp" >
    </ListView>

</LinearLayout>

结果如下图


20150321192538448.gif

可以发现滚动时顶部16dp的padding是永远滚不到的,这样看起来比较奇怪,怎么解决?
只要在ListView里加入一行代码,就可以解决问题

android:clipToPadding="false"
20150321192538448.gif

原理分析

问题:设置了clipPadding=false后,为何开始没有展示在padding区域内呢,滚动的时候才会展示呢?
默认情况下clipPadding=true,ViewGroup会根据padding来裁剪View。
在绘制时会根据clipPadding的值来判断是否绘制padding区域内子View。可以这么理解clipPadding不会影响measure、layout只会影响draw。无论clipPadding为ture或false,子View都会滚动到padding区域内,只不过在clipPadding为true时,不绘制子View的内容而已。

clipChildren常用于解决动画问题

clipChildren的作用是:如果子View比Parent大的话,是否裁剪,默认为ture,裁剪,和clipPadding一样,主要在绘制阶段作用。
举个例子,在100100的布局里放个200200的button会怎么样?

<?xml version="1.0" encoding="utf-8"?>
<!-- Button的老太爷布局 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
<!-- Button的爷爷布局 -->
 <LinearLayout
         android:clipChildren="false"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
<!-- Button的父布局 -->
    <LinearLayout  
        android:background="#ff0000"
        android:layout_width="100dp"
        android:layout_height="100dp">
        <Button
            android:id="@+id/btn"
            android:text="ww"
            android:layout_width="200dp"
            android:layout_height="200dp" />
    </LinearLayout>
 </LinearLayout>
</LinearLayout>

效果如下


搜狗截图20200523232728.png

从图中可以看到Button超出了父布局100dp的限制。
注意:clipChildren=false只能放在爷爷布局才会生效,具体原因没有看源码。

相关文章

网友评论

      本文标题:clipToPadding和clipChildren

      本文链接:https://www.haomeiwen.com/subject/biprahtx.html