2017-06-02 40 views
3

私のアプリでは反応ナビゲーションのDrawerNavigatorを使用します。カスタマイズしなければ、Androidステータスバーは黒ではなく青で表示されます。反応ナビゲーションでステータスバーの色を変更します

私は

StatusBar.setBackgroundColor('#000000'); 

を実行しようとしましたが、それはほんの数秒間動作し、それが戻って青になります。私が使用しているものは、ステータスバーの色を青色に設定しているようです。しかし、私はすべての依存関係を取り除き、反応ナビゲーションのみを維持しようとしましたが、反応ナビゲーションのドキュメントはそれについて何も言いません。

反応ナビゲーションでステータスバーの色を黒に設定するにはどうすればよいですか?

答えて

3

react-navigationStatusBarの間に矛盾はありませんが、命令型APIではなく<StatusBar>コンポーネントを使用する必要があります。これはアプリの再レンダリングに起因する可能性が高く、コンポーネントが宣言された状態でデフォルトに戻すだけで、それが起こらないことを保証します。

<StatusBar backgroundColor='blue' barStyle='light-content' /> 

あなたも、パスに応じて、それを変更するために、ルートごとに複数のものを持つことができます。ユーザーに応じて変更し、reduxを使用する場合は、接続されたコンポーネントで宣言し、backgroundColorを渡します。

+0

私もそれを試みたが、無効。しかし、私はこれをどこに置くべきかわからない。 – Arnaud

+0

トップレベルのルートコンポーネントまたはトップレベルの 'View'。 Checkout [この回答](https://stackoverflow.com/a/39300715/2054072)でも、両方のプラットフォームで使用したい場合に役立ちます。 –

+1

ありがとう! (賞金は明日授与される)。読者の方:NativeBaseを使用している場合は動作しません。ソリューションについてはこのページをご覧ください:https://github.com/GeekyAnts/NativeBase/issues/323 – Arnaud

0

DrawerNavigatorの設定を試しましたか? Docによると、contentOptionsでは引き出しの内容をカスタマイズできます。

DrawerNavigatorを定義するファイルには、router.jsというファイルがあります。たぶん、このページがお手伝いします

const MyApp = DrawerNavigator({ 
    Home: { 
     screen: MyHomeScreen, 
     contentOptions: { 
      inactiveBackgroundColor: '#000000', 
     } 
    }, 
}); 

:あなたのようにあなたのナビゲーターを作成する必要がありますDrawerNavigator

は現在、あなたの引き出しは確かにいくつかの点で再レンダリングされ、それが青になぜ色に戻ります。

+0

残念ながら、それは動作しません。私は、inactiveBackgroundColorはステータスバーの色を制御しないと考えています。 – Arnaud

+0

DrawerNavigatorを追加するStackNavigatorを宣言しましたか? HeaderStyleをNavigationOptionsでカスタマイズすることができます。まず、引き出しの背景の色を変更したいと思っていましたが、画面上部のヘッダーをカスタマイズするのがいいでしょうか? – ElFreddy

+0

引き出しの背景もヘッダーもありません。私はステータスバーをカスタマイズしたい(http://www.gizmobolt.com/wp-content/uploads/2015/02/Sony-Android-Lollipop-5.0-Status-Bar.png) – Arnaud

3
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 
1

同様に、反応ナビゲーションとステータスバーの間には矛盾はありません。各画面はデバイスのステータスバーにプロパティを設定できる必要があり、createNavigationContainerで定義されたコンテナは状態変更のオプションを取得し、ネイティブに適用する必要があります。アプリケーション全体のステータスバーでこれを試してください。

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>; 
関連する問題