react-native 抽屉页面实现

  • DrawerLayoutAndroid:
    抽屉(通常用于导航切换)是通过renderNavigationView方法渲染的,并且 DrawerLayoutAndroid 的直接子视图会成为主视图(用于放置内容)。导航视图一开始在屏幕上并不可见,不过可以从drawerPosition指定的窗口侧面拖拽出来,并且抽屉的宽度可以使用drawerWidth属性来指定。

译注:此组件仅能在 Android 上使用。我们推荐使用跨平台的react-navigation中的 DrawerNavigation 来代替此组件。

直接上代码

import React from 'react';
import {ToastAndroid, Text, View, DrawerLayoutAndroid, TouchableOpacity, StyleSheet} from 'react-native';

export default class FetchExample extends React.Component {

    constructor(props) {
        super(props);
        this.state = {isLoading: true}
    }

    open = () => {
        this.drawer.openDrawer();
    }

    close = () => {
        this.drawer.closeDrawer();
    }

    render() {
        let navigationView = (
            <View style={{flex: 1, backgroundColor: 'skyblue'}}>
                <Text style={{margin: 10, fontSize: 15, textAlign: 'left'}}>I'm in the Drawer!</Text>
                <TouchableOpacity onPress={this.close}>
                    <Text style={[styles.textStyle, styles.textSmall]}>点击关闭侧边栏</Text>
                </TouchableOpacity>

            </View>
        );
        return (
            <DrawerLayoutAndroid
                ref={(drawer) => {
                    this.drawer = drawer;
                }}
                //
                drawerWidth={300}
                // 设置导航视图从窗口边缘拉入的视图的宽度。
                drawerPosition={DrawerLayoutAndroid.positions.Left}
                // 设置导航视图从屏幕的哪一边拉入。
                renderNavigationView={() => navigationView}
                // 被拉入的导航视图的内容。

                onDrawerClose={() => {
                    ToastAndroid.show("close drawer", ToastAndroid.SHORT)
                }}
                // 导航视图被关闭后的回调函数。
                keyboardDismissMode='none'
                // 设置拖动过程中是否隐藏软键盘,'none' (默认),拖动时不隐藏软键盘。'on-drag',拖动时隐藏软键盘。
                onDrawerOpen={() => {
                    ToastAndroid.show("open drawer", ToastAndroid.SHORT);
                }}
                // 导航视图被打开后的回调函数。
            >
                <View style={{flex: 1, alignItems: "center"}}>
                    <Text style={{margin: 10, fontSize: 15,}}>Hello</Text>
                    <Text style={{margin: 10, fontSize: 15,}}>World!</Text>
                    <TouchableOpacity onPress={this.open}>
                        <Text style={styles.textStyle}>点击打开侧边栏</Text>
                    </TouchableOpacity>

                </View>
            </DrawerLayoutAndroid>
        );
    }
}
const styles = StyleSheet.create({
    textStyle: {
        margin: 10,
        color: 'red',
        textAlign: 'center',
        fontSize:15,
    },
    textSmall: {
        fontSize: 25,
    },

})
  • react-navigation之DrawerNavigator使用方法
    api:StackNavigator(RouteConfigs, StackNavigatorConfig)
    RouteConfigs(路由配置)
    StackNavigatorConfig(相关选项)
    • initialRouteName 设置栈中的默认显示路由(页面),必须匹配路由配置中的一个键值
    • initialRouteParams 默认路由的参数
    • navigationOptions 用于屏幕的默认导航选项
    • paths覆盖路由配置中设置的 path
    • mode - 定义渲染和页面切换的风格,以下两个选项是其可以使用的两个枚举值,下面同理:
      1 .card - 使用标准的 iOS 和 Android 屏幕切换风格。这是默认的。
      2 .modal - 使屏幕从底部滑入,这是一种常见的 iOS 模式。只适用于 iOS,对 Android 没有任何影响。
    • headerMode - 指定标题栏的渲染方式:
      1 .float - 在页面切换时渲染一个固定在顶部的单个标题栏和动画。这是 iOS 上的常见模式。
      2 .screen - 每个页面都有各自的标题栏,并且伴随着页面切换一起淡入淡出。这是 Android 上的常见模式。
      3 .none - 不渲染标题栏,当你需要自定义标题栏的时候,可以设置这个选项。
    • cardStyle - 使用这个属性重写或继承栈中单个卡片(页面)的默认样式。
      1 .transitionConfig - 返回值是与默认页面切换相关的对象的函数。提供的函数将传递以下参数:
      2 .transitionProps - 给新页面的切换相关属性。
      3 .prevTransitionProps - 给旧页面的切换相关属性。
    • isModal - 切换风格是否是 modal。
      1 .onTransitionStart - 当切换动画开始时调用的函数。
      2 .onTransitionEnd - 当切换动画结束时调用的函数。

举个栗子:

import React, {Component} from 'react';
import FirstPage from './FirstPage';
import {
    DrawerNavigator
} from 'react-navigation';

export default class Pages extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return (
            <SimpleAppNavigator/>
        )
    }
}
const SimpleAppNavigator = DrawerNavigator({
        page1: {screen: FirstPage},
    },

    {
        initialRouteParams: {user: 'hello'},
        initialRouteName: 'page1',
        navigationOptions: {
            title: 'Hello Navigation!'
        },

    }
);
//first 组件页面
import React, { Component } from 'react';
import {
    StyleSheet,
    Text,
    View,
    Image
} from 'react-native';
export default class SecondPage extends Component {


    render() {
        const {params} = this.props.navigation.state;
        return (
            <View style={styles.container}>
                <Text style={styles.welcome}>
                    {params.user} world!
                </Text>
            </View>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
    textView: {
        fontSize: 16,
        textAlign: 'center',
        margin: 10,
        color:'red'
    },
});
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,271评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,533评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,580评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,203评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,204评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,664评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,014评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,991评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,536评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,558评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,678评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,267评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,997评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,429评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,580评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,259评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,744评论 2 366

推荐阅读更多精彩内容

  • 晚上翻看朋友圈,有朋友晒出一张凉凉同他们医疗小组去春游的照片,我的关注点不在于那张照片上的春光有多美好,而是凉凉变...
    地丁阅读 345评论 2 0
  • “为政者兴一利,不如除一弊,能除饮食之弊则思过半矣” 兴利 “兴利”是“锦上添花”的事,因为“利”本来就...
    天下蓝图阅读 1,632评论 0 2
  • 悄悄躲在树荫,遥遥望见湖滨,落落几处游人,个个都要晒晕。
    furx阅读 187评论 0 0
  • 一开学孩子们就进入了紧张的节奏,入住的第一天宿舍纪律检查,第二天礼拜天也没放假,早上每天都要晨读(6:25到教室)...
    伶丽阅读 73评论 0 0
  • 第一个全职教练和大多数想要提升自我的全职妈妈一样,因为深知沟通和当众演讲等口才技能,对于自我成长的重要性,所以当初...
    不灭的番号阅读 341评论 0 0