Android ListView Item阴影效果问题:出现匹配偏移量的黑角
解决ListView Item自定义阴影背景的黑角问题
嘿,我之前也踩过这个坑!你碰到的黑角其实是Android系统的一个小细节——哪怕你没给shape设置radius属性,它默认也会带一点点微小的圆角。当你用layer-list里两个偏移的shape叠加时,这个默认圆角就会在阴影和前景的衔接处露出来,刚好对应你设置的偏移位置,看起来就是恼人的黑角。
解决方案:强制去掉shape的默认圆角
只需要给两个shape都显式添加<corners android:radius="0dp" />,强制让它们变成完全的直角,这样叠加后就不会有阴影的圆角部分漏出来了。修改后的代码如下:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!--shadow to bottom and right--> <!--by pushing offset from top and left--> <item android:left="0dp" android:right="2dp" android:top="2dp" android:bottom="0dp"> <shape android:shape="rectangle"> <solid android:color="@android:color/darker_gray" /> <!-- 强制取消默认圆角 --> <corners android:radius="0dp" /> </shape> </item> <!--foreground-color to cover over non-shadow--> <!--need to also offset in opposite direction--> <item android:left="2dp" android:right="0dp" android:top="0dp" android:bottom="2dp"> <shape android:shape="rectangle"> <solid android:color="@android:color/white"/> <!-- 同样强制取消默认圆角 --> <corners android:radius="0dp" /> </shape> </item> </layer-list>
额外确认点
虽然你已经设置了周边元素的白色背景,但还是可以快速检查下:
- ListView本身的背景是否为白色,避免底层底色透出来
- Item布局的根布局是否也设置了白色背景(不过你的layer-list已经作为背景的话,这个可能不是必须的)
这样修改后,黑角应该就完全消失啦!
内容的提问来源于stack exchange,提问作者AlonAviv
相关产品推荐
相关产品推荐

