StatusBarコントロール

2019-05-23

RN(React Native)でStatusBarをコントロールする方法について説明します。

概要

最近アプリを開発する時、StatusBarをコントロールする時がありました。このブログでRN(React Native)のアプリでStatusBarをコントロールする方法をまとめます。

Splashスクリーン

私はRN(React Native)でSplashスクリーンを使うためreact-native-splash-screenを使ってます。react-native-splash-screenについて詳しく内容は下記のブログを参考してください。

何にも設定しないと、Splashスクリーンが表示される時、StatusBarが表示します。下記のように設定するとSplashスクリーンでStatusBarを非表示することができます。

iOS

SplashスクリーンでStatusBarを日表示するため、info.plistを開いて下記のように修正します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <key>UIStatusBarHidden</key>
	<true/>
	<key>UIViewControllerBasedStatusBarAppearance</key>
	<false/>
    ...
</dict>
</plist>

アンドロイド

アンドロイドでSplashスクリーンが表示される時、StatusBarを非表示するためは下記のようにMainActivity.javaを修正します。

...
public class MainActivity extends ReactActivity {
...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        SplashScreen.show(this, true);
        super.onCreate(savedInstanceState);
    }
...
}

また、res/values/styles.xmlを下記のように修正します。

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
        <item name="android:windowFullscreen">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

アンドロイドで透明StatusBar

アンドロイドでStatusBarを透明にするためにはjsレベルでソースコードを修正する必要があります。StatusBarを透明にしたいコンポーネント(Component)に下記のようにソースコードを修正します。

...
import {
  ...
  StatusBar,
} from 'react-native';
...
export default class Story extends React.Component<Props, State> {
    ...
    render() {
        ...
        return (
            <React.Fragment>
                <StatusBar barStyle="dark-content" backgroundColor={'transparent'} translucent={true} />
                ...
            </React.Fragment>
        );
    }
    ...
}

上のようにRN(React Native)のStatusBarを使ってbackgroundColor={'transparent'}translucent={true}を設定したら透明なStatusBarを使えることができます。

完了

今までRN(React Native)を使って開発したアプリ内でStatusBarをコントロールする方法について説明します。上部で調べた内容以外にStatusBarをコントロールしたらこのブログに追加します。

Buy me a coffeeBuy me a coffee
Posts