Expo 启动画面
一个用于控制原生启动画面可见性行为的库。
For the complete documentation index, see llms.txt. Use this file to discover all available pages.
SplashScreen 模块来自 expo-splash-screen 库,提供对原生启动屏幕行为的控制。默认情况下,当你的应用准备就绪时,启动屏幕会自动隐藏,但你也可以在高级用例中手动控制其可见性。
从 SDK 52 开始,由于支持最新 Android 启动屏 API 的变更,Expo Go 和开发构建无法完全复现你的独立应用中用户将看到的启动屏幕体验。Expo Go 将显示你的应用图标而不是启动屏幕,而开发构建中的启动屏幕也不会反映配置插件中设置的所有属性。强烈建议你在发布构建上测试你的启动屏幕,以确保它看起来符合预期。
另外,请参阅创建启动屏幕图片指南。
安装
- npx expo install expo-splash-screenIf you are installing this in an existing React Native app, make sure to install expo in your project.
用法
对于大多数应用,你不需要对启动屏幕做任何特殊处理。它会在你的应用准备就绪时自动隐藏。你也可以选择配置动画选项:
import { Stack } from 'expo-router'; import * as SplashScreen from 'expo-splash-screen'; // 设置动画选项。这是可选的。 SplashScreen.setOptions({ duration: 1000, fade: true, }); export default function RootLayout() { return <Stack />; }
import { Text, View } from 'react-native'; import Entypo from '@expo/vector-icons/Entypo'; import * as SplashScreen from 'expo-splash-screen'; // 设置动画选项。这是可选的。 SplashScreen.setOptions({ duration: 1000, fade: true, }); export default function App() { return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>启动屏示例!👋</Text> <Entypo name="rocket" size={30} /> </View> ); }
延迟隐藏启动屏幕
在某些情况下,可能需要延迟隐藏启动屏幕,直到某些资源加载完成。例如,如果你需要在显示应用内容之前加载 API 数据,可以使用 preventAutoHideAsync() 来手动控制启动屏幕何时隐藏。目标应该是在尽可能短的时间内隐藏启动屏幕。
import { Stack } from 'expo-router'; import * as SplashScreen from 'expo-splash-screen'; import { useEffect, useState } from 'react'; // 在我们获取资源时保持启动屏幕可见 SplashScreen.preventAutoHideAsync(); export default function RootLayout() { const [isReady, setIsReady] = useState(false); useEffect(() => { async function doAsyncStuff() { try { // 在这里执行一些异步操作 } catch (e) { console.warn(e); } finally { setIsReady(true); } } doAsyncStuff(); }, []); useEffect(() => { if (isReady) { SplashScreen.hide(); } }, [isReady]); if (!isReady) { return null; } return <Stack />; }
import { useCallback, useEffect, useState } from 'react'; import { Text, View } from 'react-native'; import Entypo from '@expo/vector-icons/Entypo'; import * as SplashScreen from 'expo-splash-screen'; // 在我们获取资源时保持启动屏幕可见 SplashScreen.preventAutoHideAsync(); export default function App() { const [isReady, setIsReady] = useState(false); useEffect(() => { async function doAsyncStuff() { try { // 在这里执行一些异步操作 } catch (e) { console.warn(e); } finally { setIsReady(true); } } doAsyncStuff(); }, []); useEffect(() => { if (isReady) { SplashScreen.hideAsync(); } }, [isReady]); if (!isReady) { return null; } return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}> <Text>启动屏示例!👋</Text> <Entypo name="rocket" size={30} /> </View> ); }
配置
如果你在项目中使用配置插件(Continuous Native Generation (CNG)),可以使用其内置的配置插件来配置 expo-splash-screen。该插件允许你配置各种无法在运行时设置、且需要构建新的应用二进制文件后才会生效的属性。如果你的应用不使用 CNG,那么你需要手动配置该库。
使用如下所示的配置插件是配置启动屏幕的推荐方式。 其他方式现在都被视为旧方案,并将在未来移除。
Example app.json with config plugin
{ "expo": { "plugins": [ [ "expo-splash-screen", { "backgroundColor": "#232323", "image": "./assets/splash-icon.png", "dark": { "image": "./assets/splash-icon-dark.png", "backgroundColor": "#000000" }, "imageWidth": 200 } ] ] } }
Configurable properties
| Name | Default | Description |
|---|---|---|
backgroundColor | #ffffff | 表示启动屏幕背景颜色的十六进制颜色字符串。 |
image | undefined | 将在启动屏幕上显示的图片文件路径。它应该是你的应用图标或 logo。 |
enableFullScreenImage_legacy | false | Only for: iOS 启用此属性后,可以将全屏图片用作启动屏幕。这用于帮助从旧版启动屏幕配置迁移,未来将被移除。 |
dark | undefined | 一个包含在设备处于深色模式时用于配置启动屏幕属性的对象。 |
imageWidth | 100 | 图片的宽度。 |
android | undefined | 一个包含用于配置 Android 上启动屏幕属性的对象。 |
ios | undefined | 一个包含用于配置 iOS 上启动屏幕属性的对象。 |
resizeMode | undefined | 决定图片如何缩放以适应由 |
你也可以使用以下应用配置属性来配置 expo-splash-screen,但仍应优先使用配置插件。
Are you using this library in an existing React Native app?
请查看expo-splash-screen 仓库中的安装说明,了解如何配置原生项目。
为启动屏幕添加动画
SplashScreen 提供开箱即用的淡出动画。可以使用 setOptions 方法进行配置。
SplashScreen.setOptions({ duration: 1000, fade: true, });
如果你更喜欢使用自定义动画,请参阅 with-splash-screen 示例,了解如何为启动屏幕应用任意动画。你可以通过运行 npx create-expo-app --example with-splash-screen,基于此示例初始化一个新项目。
API
import * as SplashScreen from 'expo-splash-screen';
Methods
Hides the native splash screen immediately. Be careful to ensure that your app has content ready to display when you hide the splash screen, or you may see a blank screen briefly. See the "Usage" section for an example.
voidMakes the native splash screen (configured in app.json) remain visible until hideAsync is called.
Important note: It is recommended to call this in global scope without awaiting, rather than inside React components or hooks, because otherwise this might be called too late, when the splash screen is already hidden.
Promise<boolean>Example
import * as SplashScreen from 'expo-splash-screen'; SplashScreen.preventAutoHideAsync(); export default function App() { // ... }
| Parameter | Type |
|---|---|
| options | SplashScreenOptions |
Configures the splashscreens default animation behavior.
void