React Navigation--DrwaerNavigator 详细的例子

来源:互联网 发布:免费手机组态软件 编辑:程序博客网 时间:2024/04/28 16:54
/** * Created by YiBing on 2017/5/5. * DrawerNavigator:主要和StackNavigator功能差不多,然后多了抽屉功能。 * 本程序效果:有三个页面,每个页面都能打开抽屉,抽屉页面显示的是三个页面的名称, *   每个页面可以跳转,Home->Notifications->Notifications2, 点击抽屉中的条目,也可以跳转到相应的页面, *   第一个页面还有两个特殊按钮,一个可以打开抽屉,一个可以关闭抽屉。 * * this.props.navigation.navigate('DrawerOpen'); // open drawer * this.props.navigation.navigate('DrawerClose'); // close drawer * * API Definition DrawerNavigator(RouteConfigs, DrawerNavigatorConfig) RouteConfigs The route configs object is a mapping from route name to a route config, which tells the navigator what to present for that route, see example from StackNavigator. DrawerNavigatorConfig drawerWidth - Width of the drawer drawerPosition - Options are left or right. Default is left position. contentComponent - Component used to render the content of the drawer, for example, navigation items. Receives the navigation prop for the drawer. Defaults to DrawerItems. For more information, see below. contentOptions - Configure the drawer content, see below. Example: Default the DrawerView isn't scrollable. To achieve a scrollable View, you have to use the contentComponent to customize the container, as you can see in the example below. {   drawerWidth: 200,   drawerPosition: 'right',   contentComponent: props => <ScrollView><DrawerItems {...props} /></ScrollView> } Several options get passed to the underlying router to modify navigation logic: initialRouteName - The routeName for the initial route. order - Array of routeNames which defines the order of the drawer items. paths - Provide a mapping of routeName to path config, which overrides the paths set in the routeConfigs. backBehavior - Should the back button cause switch to the initial route? If yes, set to initialRoute, otherwise none. Defaults to initialRoute behavior. Providing a custom contentComponent You can easily override the default component used by react-navigation: import { DrawerItems } from 'react-navigation'; const CustomDrawerContentComponent = (props) => ( <View style={style.container}> <DrawerItems {...props} /> </View> ); const styles = StyleSheet.create({  container: {    flex: 1,  },}); contentOptions for DrawerItems activeTintColor - label and icon color of the active label activeBackgroundColor - background color of the active label inactiveTintColor - label and icon color of the inactive label inactiveBackgroundColor - background color of the inactive label style - style object for the content section labelStyle - style object to overwrite Text style inside content section, when your label is a string Example: contentOptions: {  activeTintColor: '#e91e63',  style: {    marginVertical: 0,  }} Screen Navigation Options title Generic title that can be used as a fallback for headerTitle and drawerLabel drawerLabel String, React Element or a function that given { focused: boolean, tintColor: string } returns a React.Element, to display in drawer sidebar. When undefined, scene title is used drawerIcon React Element or a function, that given { focused: boolean, tintColor: string } returns a React.Element, to display in drawer sidebar Navigator Props The navigator component created by DrawerNavigator(...) takes the following props: screenProps - Pass down extra options to child screens, for example: const DrawerNav = DrawerNavigator({  // config}); <DrawerNav screenProps={      //this prop will get passed to the screen components and nav options as props.screenProps  }/> */import React from 'react';import {    Button,    ScrollView,    Text,    StyleSheet,    Image,    View,    TouchableOpacity,} from 'react-native';import {    DrawerNavigator,} from 'react-navigation';class MyHomeScreen extends React.Component {    static navigationOptions = {        drawerLabel: 'Home',        drawerIcon: ({ tintColor }) => (            <Image                source={require('./img/notif-icon.png')}                style={[styles.icon, {tintColor: tintColor}]}            />        ),    };    render() {        return (            <View style={{flex: 1}}>                <TouchableOpacity onPress={() => this.props.navigation.navigate('Notifications')}>                    <Text style={{textAlign:'right', backgroundColor:'#36bfdf', height: 30, margin:20}}>Go to notifications</Text>                </TouchableOpacity>                <TouchableOpacity onPress={() => this.props.navigation.navigate('DrawerOpen')}>                    <Text style={{textAlign:'right', backgroundColor:'#36bfdf', height: 30, margin:20}}>打开</Text>                </TouchableOpacity>                <TouchableOpacity onPress={() => this.props.navigation.navigate('DrawerClose')}>                    <Text style={{textAlign:'right', backgroundColor:'#36bfdf', height: 30, margin:20}}>关闭</Text>                </TouchableOpacity>            </View>        );    }}class MyNotificationsScreen extends React.Component {    static navigationOptions = {        drawerLabel: 'Notifications',        drawerIcon: ({ tintColor }) => (            <Image                source={require('./img/notif-icon.png')}                style={[styles.tabIcon, {tintColor: tintColor}]}            />        ),    };    render() {        return (            <Button                onPress={() => this.props.navigation.navigate('Notifications2')}                title="Go to notifications2"            />        );    }}class MyNotificationsScreen2 extends React.Component {    static navigationOptions = {        drawerLabel: 'Notifications2',        drawerIcon: ({ tintColor }) => (            <Image                source={require('./img/notif-icon.png')}                style={[styles.tabIcon, {tintColor: tintColor}]}            />        ),    };    render() {        return (            <Button                onPress={() => this.props.navigation.navigate('Home')}                title="Go back home"            />        );    }}const styles = StyleSheet.create({    icon: {        width: 24,        height: 24,    },});const SimpleDrawerNavigator = DrawerNavigator({    Home: {        screen: MyHomeScreen,    },    Notifications: {        screen: MyNotificationsScreen,    },    Notifications2: {        screen: MyNotificationsScreen2,    },});export default SimpleDrawerNavigator;







0 0
原创粉丝点击