xref: /expo/docs/pages/tutorial/configuration.mdx (revision 9d7b0c19)
1---
2title: Configure status bar, splash screen and app icon
3---
4
5import ImageSpotlight from '~/components/plugins/ImageSpotlight';
6import Video from '~/components/plugins/Video';
7import { Collapsible } from '~/ui/components/Collapsible';
8import { A } from '~/ui/components/Text';
9import { Terminal } from '~/ui/components/Snippet';
10import { Step } from '~/ui/components/Step';
11import { BoxLink } from '~/ui/components/BoxLink';
12import { BookOpen02Icon } from '@expo/styleguide-icons';
13
14Before considering the app fully launchable, we have to configure the status bar, add a splash screen, and add an app icon. In this chapter, we will learn how to do all of that.
15
16<Step label="1">
17
18## Configure the status bar
19
20The <A href="/versions/latest/sdk/status-bar/" openInNewTab>`expo-status-bar`</A> library comes pre-installed in every project created using `create-expo-app`.
21This library provides a `<StatusBar>` component that allows configuring the app's status bar to change the text color, background color, make it translucent, and so on.
22
23The `<StatusBar>` component is already imported in the **App.js**:
24
25```jsx App.js
26import { StatusBar } from 'expo-status-bar';
27```
28
29It's also mounted in the `<App>` component.
30
31```jsx App.js
32<StatusBar style="auto" />
33```
34
35Currently, the `style` value is `auto`. It means that the status bar will automatically pick the text color based on the app's color scheme.
36However, we do not have different color schemes in the tutorial app. There is only one active color scheme, which has a dark background.
37To make the status bar light, change the `style` value to `light`.
38
39```jsx App.js
40<StatusBar style="light" />
41```
42
43<ImageSpotlight
44  alt="Break down of initial layout."
45  src="/static/images/tutorial/statusbar-example.jpg"
46  style={{ maxWidth: 480 }}
47/>
48
49</Step>
50
51<Step label="2">
52
53## Splash screen
54
55A splash screen is a screen that is visible before the contents of the app has had a chance to load. It hides once the app is ready for use and the content is ready to be displayed.
56
57The splash screen is configured by defining a path to the `"splash.image"` property in the <A href="/workflow/configuration/" openInNewTab>**app.json** file</A>.
58It has a current value of `"./assets/splash.png"` path. This is already done by default when a new Expo project is created.
59
60We already have **splash.png** in the **assets** directory. It looks as shown below:
61
62<ImageSpotlight
63  src="/static/images/tutorial/splash.png"
64  style={{ maxWidth: 250 }}
65  containerStyle={{ marginBottom: 20 }}
66/>
67
68Let's take a look at our app now on Android, and iOS:
69
70<Video file={'tutorial/splash-add.mp4'} />
71
72<Collapsible summary="Is the app loading too quickly for you to get a good look at the splash screen?">
73
74You can make the splash screen stick around for longer by manually controlling when it is hidden, rather than the default of automatically hiding it as soon as the app is ready.
75
76Start by running the following command:
77
78<Terminal cmd={['$ npx expo install expo-splash-screen']} />
79
80Next, add the following code in **App.js** to delay hiding the splash screen for five seconds.
81
82```jsx App.js
83import * as SplashScreen from 'expo-splash-screen';
84
85SplashScreen.preventAutoHideAsync();
86setTimeout(SplashScreen.hideAsync, 5000);
87```
88
89Don't forget to remove this code when you are done testing your splash screen!
90
91</Collapsible>
92
93Notice that there is a white bar on the edges of the Android device in the above demo. Depending on the resolution of the device, it might not be visible. To resolve this, we need to set the `backgroundColor` for the splash screen. The background color is applied to any screen area that isn't covered by the splash image.
94
95</Step>
96
97<Step label="3">
98
99## Configure the splash screen background color
100
101We can configure the splash screen's background color in **app.json** file. Open it and make the following change in `"splash"`:
102
103{/* prettier-ignore */}
104```json app.json
105{
106  "splash": {
107    "image": "./assets/splash.png",
108    "resizeMode": "contain",
109    /* @info Use #25292e (black) instead of the default #ffffff (white). */
110    "backgroundColor": "#25292e" /* @end */
111  }
112}
113```
114
115The `backgroundColor` value in the above snippet matches the background of the splash screen image.
116
117Let's take a look at our app now on Android and iOS:
118
119<Video file={'tutorial/splash-fixed.mp4'} />
120
121</Step>
122
123<Step label="4">
124
125## App icon
126
127Inside the project, there's an **icon.png** file inside **assets** directory. This is our app icon. It's a 1024px by 1024px image and looks as shown below:
128
129<ImageSpotlight src="/static/images/tutorial/icon.png" style={{ maxWidth: 150 }} />
130
131Similar to splash screen image, the icon is configured by defining a path to the `"icon"` property in the **app.json** file. It has a current value of `"./assets/icon.png"`, so we don't have to change anything.
132
133> Eventually, when you build the app for the app stores, Expo Application Services (EAS) will take this image and create optimized icon for every device.
134
135You can see the icon in various places in Expo Go. Here is an example of the app icon displayed in the developer menu of Expo Go:
136
137<ImageSpotlight
138  alt="Splash screen on Developer Menu in Expo Go app."
139  src="/static/images/tutorial/app-icon-visible.jpg"
140  style={{ maxWidth: 250 }}
141  containerStyle={{ marginBottom: 0 }}
142/>
143
144</Step>
145
146## We have completed the app!
147
148Well done! We built an app that runs on Android, iOS, and the web from the same codebase.
149
150<BoxLink
151  title="Learn more"
152  Icon={BookOpen02Icon}
153  description="The next section of the tutorial will guide you toward resources to learn more about concepts we've covered here and others we have mentioned briefly."
154  href="/tutorial/follow-up"
155/>
156