移动/游戏
Capacitor 应用启动屏配置与自定义(含资源生成…
在 Capacitor 应用中配置 iOS/Android 启动屏、生成多尺寸资源、实现动画与暗色模式支持时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
Capacitor 应用启动屏配置与自定特定
解决思路
- 安装插件:运行 `npm install @capacitor/splash-screen` 并执行 `npx cap sync`。
- 在 `capacitor.config.ts` 的 `plugins.SplashScreen` 中配置基础参数:`launchShowDuration`、`launchAutoHide`、`backgroundColor`、`androidSplashResourceName`、`androidScaleType`、`showSpinner`、`splashFullScreen`、`splashImmersive`。
- 通过编程方式控制:应用初始化完成后调用 `await SplashScreen.hide()`;需要刷新时调用 `await SplashScreen.show({ autoHide: false })`;带淡出动画时调用 `await SplashScreen.hide({ fadeOutDuration: 500 })`。
- 生成资源:安装 `npm install -D @capacitor/assets`,将源图放在 `resources/`(推荐 `resources/splash.png` 2732x2732,可选 `resources/splash-dark.png`),然后运行 `npx capacitor-assets generate`。
- 按 iOS 尺寸表准备资源:2732x2732(iPad Pro 12.9")、2048x2732(iPad Pro 竖屏)、2732x2048(iPad Pro 横屏)、1668x2388(iPad Pro 11")、1536x2048(iPad)、1242x2688(iPhone XS Max)、828x1792(iPhone XR)、1125x2436(iPhone X/XS)、1242x2208(iPhone Plus)、750x1334(iPhone 8)、640x1136(iPhone SE)。
- 按 Android 密度表准备资源:mdpi 320x480、hdpi 480x800、xhdpi 720x1280、xxhdpi 960x1600、xxxhdpi 1280x1920。
- 配置 iOS Storyboard:编辑 `ios/App/App/Base.lproj/LaunchScreen.storyboard`,添加居中显示的 `imageView`(`contentMode="scaleAspectFit"`,`image="splash"`),并用约束使其水平、垂直居中。
- 配置 Android 11+ XML 启动屏:在 `android/app/src/main/res/values/styles.xml` 中定义 `AppTheme.NoActionBarLaunch`,继承 `Theme.SplashScreen`,设置 `windowSplashScreenBackground`、`windowSplashScreenAnimatedIcon`、`windowSplashScreenAnimationDuration`、`postSplashScreenTheme`。
- 配置 Android 颜色:在 `android/app/src/main/res/values/colors.xml` 中定义 `splash_background`,并在 `android/app/src/main/res/values-night/colors.xml` 中定义暗色版本。
- 支持暗色模式:在 `capacitor.config.ts` 中设置 `launchAutoHide: false` 手动控制;iOS 使用 LaunchScreen.storyboard 变体,Android 使用 `values-night/colors.xml`;用 `window.matchMedia('(prefers-color-scheme: dark)').matches` 检测暗色模式后调用 `SplashScreen.hide({ fadeOutDuration: 300 })`。
- 实现动画启动屏:先 `await SplashScreen.show({ autoHide: false })` 保持原生启动屏,再动态 `import('lottie-web')`,在 `#splash-animation` 容器中加载 Lottie 动画(`loop: false`),在 `complete` 事件中调用 `await SplashScreen.hide({ fadeOutDuration: 0 })` 并隐藏 Web 启动屏。
- 遵循最佳实践:总时长控制在 2 秒以内、保持品牌配色与 logo 一致、提供暗色变体、只加载必要内容、使用平滑淡出实现渐进显示。
- 排查常见问题:白屏闪烁时让启动屏背景与应用一致;拉伸时使用正确尺寸资源;不隐藏时手动调用 `hide()`;暗色模式异常时添加 `values-night` 资源。
适用边界 · 注意事项
- 非 Capacitor 项目(如纯原生 iOS/Android 或 React Native)不适用。
- 需要依赖 `@capacitor/splash-screen` 与 `@capacitor/assets` 插件,未安装这些依赖时无法直接使用。
- Lottie 动画方案需要额外引入 `lottie-web` 并准备动画 JSON 文件。