@yzzer
2020-05-06T12:01:38.000000Z
字数 2417
阅读 473
状态栏 StatusBar 就是手机屏幕最顶上一个区域,包含 运营商名称、网络情况、电池情况那一条。
暗色系

亮色系

在 React Native 中我们可以定制 状态栏 StatusBar 。当然了,说是定制,无非以下几点
React Native 提供了 `` 组件来做上面这些事情。
import { StatusBar } from 'react-native'
<StatusBarbarStyle = "dark-content|light-content"hidden = {true|false}animated = {true|false}/>
React Native 中的 StatusBar 采用覆盖规则,我们可以在一个页面中定义多个 。 后面定义的 的属性会覆盖前一个 `` 设置的属性。
<View><StatusBar backgroundColor="blue" barStyle="light-content" /><View><StatusBar hidden={route.statusBarHidden} />...</View></View>
除了可以使用属性来设置状态栏外,React Native 中的 StatusBar 还提供了一些静态方法用来设置状态栏。
setHidden()
setHidden() 用于设置显示或隐藏状态栏。
setHidden() 的函数原型如下
static setHidden(hidden: boolean, [animation]: StatusBarAnimation)
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| hidden | boolean | 是 | 是否隐藏状态栏,true 是,false 否 |
| animation | StatusBarAnimation | 否 | 可选,设置显示或隐藏状态改变时的动画。 |
2. setBarStyle()
setBarStyle() 用于设置状态栏的主题色。
setBarStyle() 的函数原型如下
static setBarStyle(style: StatusBarStyle, [animated]: boolean)
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| style | StatusBarStyle | 是 | 要设置的状态栏主题色 |
| animated | boolean | 否 | 主题色改变时是否动画 |
StatusBarStyle
StatusBarStyle 枚举常量定义了状态栏可用的主题色.
值说明
| 值 | 说明 |
|---|---|
| default | 默认主题色,iOS 上是 dark-content ,Android 是 light-content |
| light-content | 暗色的背景,亮色的文字和图标 |
| dark-content | 亮色的背景,暗色的文字和图标( Android 要求 API >= 23 ) |
2. StatusBarAnimation
StatusBarAnimation 枚举常量定义了状态栏可用的动画效果。
值说明
| 值 | 说明 |
|---|---|
| none | 默认,没有动画效果 |
| fade | 渐隐渐现动画效果 |
| slide | 渐入渐出动画效果 |
下面的代码,我们设置状态栏 StatusBar 的主题色为 暗色系,同时显示状态栏。
import React, { Component } from 'react';import { StatusBar } from 'react-native'const App = () => {return (<StatusBar barStyle = "dark-content" hidden={false} />)}export default App
运行效果如下

下面的代码,我们使用脚本来控制状态栏的显示和隐藏,使用脚本来控制状态栏的主题色
import React, { Component } from 'react';import {View, Text, StatusBar, StyleSheet, TouchableOpacity} from 'react-native'class App extends Component {state = {hidden:false,barStyle:'default'}changeHidden = () =>{var hidden = this.state.hidden ? false : true;this.setState({ hidden: hidden })}changeBarStyle = () =>{var barStyle = this.state.barStyle == 'light-content' ? 'dark-content' : 'light-content';this.setState({ barStyle: barStyle })}render() {return (<View><StatusBar barStyle = {this.state.barStyle} hidden={this.state.hidden} /><TouchableOpacity style={styles.button} onPress = {this.changeHidden}><Text>显示或隐藏</Text></TouchableOpacity><TouchableOpacity style={styles.button} onPress = {this.changeBarStyle}><Text>改变主题色</Text></TouchableOpacity></View>)}}export default Appconst styles = StyleSheet.create ({button: {backgroundColor: '#4ba37b',width: 100,borderRadius: 50,alignItems: 'center',marginTop: 100}})
演示效果如下
大家知道为什么隐藏的时候有一条黑色的条吗?
那是因为的实体机是全屏手机,顶部的中央有一个 摄像头。