Android 12使用core-splashscreen库启动页图标截断问题解决方案
问题根源
API 31及以上版本的原生启动屏对windowSplashScreenAnimatedIcon有固定的圆形裁剪规则:
- 官方文档标注的288×192dp是启动图标对应的总画布尺寸,并非所有画布区域都能显示:只有画布中心直径192dp的圆形区域是安全显示区,区域外内容会被系统强制裁剪。
- 你当前的
themes.xml配置符合规范,问题出在splash_icon.xml的尺寸配置:第一层透明占位项设置为288dp×288dp的正方形,超出了系统规定的192dp画布高度,导致画布整体错位,实际图标偏移出安全区后就会出现截断。
修复方案
修改splash_icon.xml配置,严格匹配系统尺寸规范,确保实际图标完全落在安全显示区内:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 透明占位层严格匹配系统要求的288dp×192dp画布尺寸 --> <item android:width="288dp" android:height="192dp" android:drawable="@android:color/transparent" android:gravity="center" /> <!-- 实际业务图标居中放置,尺寸控制在160dp以内,避免贴到圆形遮罩边缘被裁 --> <item android:width="144dp" android:height="144dp" android:drawable="@drawable/ic_baseline_sick" android:gravity="center" /> </layer-list>
额外注意事项
- 不要将启动图标画布设置为正方形,必须严格使用288dp宽、192dp高的尺寸,否则系统缩放画布时会出现错位裁剪。
- 如果配置的是动画矢量图标,所有动画的运动路径不能超出中心192dp直径的圆形安全区,否则动画过程中会出现内容截断。
- 适配API30及以下低版本时该规则同样生效,避免不同版本启动图标显示效果不一致。
内容的提问来源于stack exchange,提问作者dylan.kwon
相关产品推荐
相关产品推荐

