使用Android SplashScreen API时SVG启动图标显示不全如何解决
问题根因
SplashScreen API对启动图标有明确的尺寸约束,即便使用SVG格式也会被内置蒙版强制裁剪,规则如下:
- 图标整体画布尺寸要求为288dp×288dp
- 有效可见内容必须放在内部192dp×192dp的安全区域内,超出安全区的部分会被裁剪,你当前使用的长条形文字SVG横向超出了安全区范围,因此出现显示不全的问题。
- 你所使用的1.0.0-alpha02属于早期测试版本,本身存在图标适配的已知bug,也可能加剧裁剪异常。
可行解决方案
- 升级依赖版本
优先将SplashScreen依赖升级到正式稳定版,修复早期版本的兼容问题:
implementation "androidx.core:core-splashscreen:1.0.1"
- 调整图标适配规则
不需要修改原SVG文件,新增一个layer-list类型的drawable作为启动图标载体,给原图标添加安全边距,示例代码:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_disney_wordmark" android:width="180dp" android:height="180dp" android:gravity="center" /> </layer-list>
修改主题配置,将windowSplashScreenAnimatedIcon指向上述新建的layer-list drawable即可。
- 使用品牌标识属性适配长条形logo
如果不想缩小文字logo的显示尺寸,可以使用SplashScreen专门提供的品牌标识属性,该属性的展示区域不受圆形蒙版裁剪限制,位置位于启动页底部:
<item name="windowSplashScreenBrandingImage">@drawable/ic_disney_wordmark</item>
原本的windowSplashScreenAnimatedIcon位置替换为标准尺寸的应用图标即可。
内容的提问来源于stack exchange,提问作者Lars
相关产品推荐
相关产品推荐

