Изменение цвета строки состояния с помощью react-навигации
Я использую DrawerNavigator
из react-navigation в моем приложении. Без какой-либо настройки строка состояния Android является синей, а не черной.
Я пытался сделать
StatusBar.setBackgroundColor('#000000');
но он работает всего несколько секунд,а затем возвращается к синему. Кажется, что то, что я использую, устанавливает цвет строки состояния в синий. Тем не менее, я попытался удалить все зависимости и сохранить только react-navigation, и это все еще происходит, и документы react-navigation ничего не говорят что.
Как установить цвет строки состояния в черный с помощью react-navigation ?
4 ответов
Я не думаю, что существует какой-либо конфликт между react-navigation
и StatusBar
, но я думаю, что вы должны использовать <StatusBar>
компонент, а не императивный API. Существует высокая вероятность того, что это связано с повторным рендерингом вашего приложения, и он просто переключится на значение по умолчанию, с объявлением компонента, вы гарантируете, что этого не произойдет.
<StatusBar backgroundColor='blue' barStyle='light-content' />
вы даже можете иметь несколько из них на пути, чтобы изменить его в зависимости от пути. Если вы хотите изменить его в зависимости от пользователя и с помощью redux
, объявить это в подключенном компоненте и передайте backgroundColor
.
import React, {Component} from 'react';
import {Text, TouchableOpacity, View, StatusBar} from 'react-native';
import {StackNavigator} from 'react-navigation';
import Icon from 'react-native-vector-icons/MaterialIcons';
import styles from "../styles/Style";
class ProfileScreen extends Component {
static navigationOptions = ({navigation}) => {
return {
headerLeft: (
<TouchableOpacity onPress={() => {
navigation.navigate('DrawerOpen');
}}>
<Icon name="menu" size={30} color="#fff" style={styles.burgerIcon}/>
</TouchableOpacity>
),
title: 'My Profile',
headerRight: (
<Icon name={'edit'} size={30} color={'#fff'} style={styles.headerRightIcon}/>
),
headerTintColor: "#fff",
headerStyle: {
backgroundColor: '#8BC83D',
height: 56,
elevation: null
}
};
};
render() {
return (
<View style={styles.screenContainer}>
<StatusBar
backgroundColor="#7CB236"
barStyle="light-content"
/>
<Text style={styles.welcome}>
I amsecond reder
</Text>
</View>
);
}
}
const ProfileScreenList = StackNavigator(
{
ProfileScreenIndex: {screen: ProfileScreen},
}
);
export default ProfileScreenList
Как Aperçu сказал, нет конфликта между react-navigation и StatusBar. Каждый экран должен иметь возможность устанавливать свойства в строке состояния устройства, а контейнер, определенный в createNavigationContainer, должен получать параметры изменения состояния и применять их изначально. попробуйте это для StatusBar для всего приложения.
const AppContent = StackNavigator({
Home: { screen: HomeScreen },
Secondary: { screen: SecondaryScreen },
});
const App = () =>
<View style={{flex: 1}}>
<StatusBar backgroundColor="blue" barStyle="light-content"/>
// style the bar. barStyle is text and icon color od status bar.
<AppContent />
</View>;
вы пытались установить конфигурацию DrawerNavigator ?
Док говорит, что contentOptions
позволяет настроить содержимое ящика.
в файле, где вы определите свой DrawerNavigator
, может быть, ваш . Вы должны создать свой навигатор как:
const MyApp = DrawerNavigator({
Home: {
screen: MyHomeScreen,
contentOptions: {
inactiveBackgroundColor: '#000000',
}
},
});
возможно, эта страница поможет вам: DrawerNavigator
В настоящее время ваш ящик, безусловно, перерисовывается в какой-то момент, поэтому цвет возвращается к синему.