如何让ChipGroup内的Chip绘制在MaterialCardView边框上方
该问题是Android系统的Z轴绘制优先级导致的。Android 5.0及以上版本中,View的绘制顺序不完全由XML中的声明顺序决定,Z轴高度(elevation+translationZ)更高的组件会优先绘制在顶层。MaterialCardView默认自带elevation属性,其值高于Chip默认的Z轴高度,因此无论ChipGroup写在XML的顺序在前还是在后,都会被Card盖住。普通Button默认没有额外elevation,因此声明顺序靠后时就可以正常叠加在Card上方。
方案1:给Chip/ChipGroup设置更高的Z轴高度
给ChipGroup添加elevation属性,取值只要大于MaterialCardView的默认elevation(通常为1dp)即可,示例如下:
<com.google.android.material.chip.ChipGroup app:layout_constraintTop_toTopOf="parent" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="10dp" android:elevation="2dp" <!-- 新增该行 --> app:singleLine="true"> <!-- Chip内部代码保持不变 --> </com.google.android.material.chip.ChipGroup>
方案2:移除MaterialCardView的默认海拔
给MaterialCardView添加stateListAnimator="@null"属性,关闭其默认自带的海拔效果,此时XML声明顺序就会生效,将ChipGroup写在MaterialCardView的后面即可正常叠加:
<com.google.android.material.card.MaterialCardView android:layout_width="match_parent" app:layout_constraintTop_toTopOf="parent" android:layout_height="72dp" android:layout_marginTop="22dp" app:cardCornerRadius="0dp" app:strokeColor="@android:color/holo_red_light" app:strokeWidth="2dp" android:stateListAnimator="@null"/> <!-- 新增该行 --> <!-- 注意ChipGroup要写在Card的后面 --> <com.google.android.material.chip.ChipGroup ... 其余属性不变 >
补充验证
如果修改后仍有显示问题,可给根布局ConstraintLayout添加以下两个属性,避免父布局裁剪边界外的内容:
android:clipChildren="false" android:clipToPadding="false"
内容的提问来源于stack exchange,提问作者dariovaz
相关产品推荐
相关产品推荐

