RecyclerView首尾Item阴影被裁剪,常规属性无法修复
RecyclerView首尾Item阴影被裁剪的修复方案
核心原因
RecyclerView默认开启clipToPadding="true",会把padding区域内的子View绘制内容(包括阴影)裁剪掉;若父容器开启clipChildren="true",也会限制子View的绘制范围,导致阴影被裁。
修复步骤
1. 修改RecyclerView的裁剪属性(最直接解决)
给RecyclerView添加android:clipToPadding="false",同时设置android:paddingTop和android:paddingBottom(值等于Item阴影的扩散范围,比如自定义的@dimen/shadow_size),这样阴影就能在padding区域完整显示,不会被裁剪。
修改后的RecyclerView代码:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/usersRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/margin_m" android:clipToPadding="false" android:paddingTop="@dimen/shadow_size" android:paddingBottom="@dimen/shadow_size" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/selectUsersTitle" />
2. 解除父容器的绘制限制
如果第一步无效,检查RecyclerView的直接父容器(ScrollView内的ConstraintLayout)是否开启了clipChildren="true",改成android:clipChildren="false",允许子View超出父容器范围绘制阴影:
<androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false">
3. 调整ScrollView的裁剪设置(可选)
若ScrollView也存在裁剪问题,给ScrollView添加android:clipToPadding="false",并设置对应padding(一般前两步即可解决,此步为补充)。
关键说明
之前添加margin没用,是因为margin仅增加空白区域,不会放开对阴影的裁剪限制;而clipToPadding="false"会让RecyclerView的padding区域不再裁剪Item的绘制内容,padding相当于给阴影预留了显示空间。
内容的提问来源于stack exchange,提问作者Sunbey13
相关产品推荐
相关产品推荐

