API 31下如何设置仅单张图片作为Android启动屏?
API 31 Android 单图启动屏问题解决方法
主题配置修正
你的当前配置缺少关键属性,导致默认图标和背景仍会显示。修改后的完整主题样式如下:
<style name="Theme.SplashTheme" parent="Theme.SplashScreen"> <!-- 设置整图作为启动屏背景 --> <item name="windowSplashScreenBackground">@drawable/splash_image</item> <!-- 移除默认应用图标 --> <item name="windowSplashScreenAnimatedIcon">@null</item> <!-- 取消图标背景色,避免透明区域出现默认底色 --> <item name="windowSplashScreenIconBackgroundColor">@android:color/transparent</item> <!-- 禁用启动动画,防止整图被动画逻辑干扰 --> <item name="windowSplashScreenAnimationDuration">0</item> <!-- 指定启动完成后的主应用主题 --> <item name="postSplashScreenTheme">@style/Theme.AppTheme</item> <!-- 兼容旧逻辑,确保整图全屏显示 --> <item name="android:windowBackground">@drawable/splash_image</item> <item name="android:windowFullscreen">true</item> </style>
代码层补充
在启动Activity的onCreate方法中,必须先调用Splash Screen API的安装方法,确保主题配置生效:
Kotlin 实现
override fun onCreate(savedInstanceState: Bundle?) { // 必须在super.onCreate之前调用 installSplashScreen() super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) }
Java 实现
@Override protected void onCreate(Bundle savedInstanceState) { SplashScreen.installSplashScreen(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
额外注意事项
- 确保
splash_image已适配不同分辨率,放置在对应的drawable目录(如drawable-mdpi、drawable-hdpi等),避免拉伸变形。 - 检查主应用主题
Theme.AppTheme,不要设置windowBackground等属性与启动屏主题冲突。
内容的提问来源于stack exchange,提问作者chaeng
相关产品推荐
相关产品推荐

