Jetpack Compose中如何移除Card组件底部的阴影?
移除Card组件底部阴影的可行方法
Compose的Card自带的elevation参数会生成四周均匀的阴影,无法单独控制某一侧的阴影显示。要实现只保留顶部、左右侧阴影,移除底部阴影的效果,你可以放弃Card自带的elevation,改用以下两种方案:
方法一:Box嵌套覆盖底部阴影
通过外层Box添加整体阴影,再用与Card背景色一致的矩形覆盖底部阴影区域:
Box( modifier = modifier .shadow(elevation = 16.dp, shape = shape) ) { Card( modifier = Modifier.fillMaxSize(), shape = shape, backgroundColor = MaterialTheme.colors.surface, elevation = 0.dp // 关闭Card自带阴影 ) { // 放置Card内容 } // 覆盖底部阴影的矩形 Box( modifier = Modifier .align(Alignment.BottomCenter) .fillMaxWidth() .height(16.dp) // 高度与阴影elevation值一致 .background(MaterialTheme.colors.surface) ) }
方法二:自定义绘制阴影
通过drawBehind手动绘制仅顶部和左右侧的阴影,完全控制阴影显示范围:
Card( modifier = modifier .drawBehind { val shadowColor = MaterialTheme.colors.shadow val elevationPx = 16.dp.toPx() // 绘制顶部阴影 drawRect( color = shadowColor.copy(alpha = 0.3f), top = -elevationPx, left = 0f, right = size.width, height = elevationPx ) // 绘制左侧阴影(底部留空) drawRect( color = shadowColor.copy(alpha = 0.2f), left = -elevationPx, top = 0f, width = elevationPx, height = size.height - elevationPx ) // 绘制右侧阴影(底部留空) drawRect( color = shadowColor.copy(alpha = 0.2f), right = size.width + elevationPx, top = 0f, width = elevationPx, height = size.height - elevationPx ) }, shape = shape, backgroundColor = MaterialTheme.colors.surface, elevation = 0.dp // 关闭自带阴影 ) { // 放置Card内容 }
两种方案都需要将Card的elevation设为0.dp,避免自带阴影干扰最终效果。
内容的提问来源于stack exchange,提问作者AndroidDev
相关产品推荐
相关产品推荐

