【React Native】React Native中DrawerLayoutAndroid通过点击实现展开和关闭
来源:互联网 发布:兴安得力预算软件 编辑:程序博客网 时间:2024/05/12 12:12
React Native中,DrawerLayoutAndroid组件与Android原生开发中的DrawerLayout一样实现侧滑菜单的效果。通过手势左右滑动实现拉出与退出的操作,但是需要通过点击图标或者文字就能弹出侧滑菜单该怎么做呢?
这时就需要知道DrawerLayoutAndroid在展开和关闭时所调用的具体方法了,这个可以通过源码知道,点开DrawerLayoutAndroid.android.js的源码,发现展开侧滑菜单的方法是这样:
/** * Opens the drawer. */ openDrawer: function() { UIManager.dispatchViewManagerCommand( this._getDrawerLayoutHandle(), UIManager.AndroidDrawerLayout.Commands.openDrawer, null ); },
同样也有关闭时的closeDrawer方法。
所以,在自己的项目中,只需要拿到DrawerLayoutAndroid组件,直接或间接调用openDrawer方法即可实现展开。
那么具体的操作就是下面这样:
1–在DrawerLayoutAndroid中添加ref属性。
添加ref属性即可实现对组件的引用。这里需要获取到DrawerLayoutAndroid的引用来调用展开关闭的方法。关于ref属性不熟悉的看这里—对组件的引用(refs)。
(这里对DrawerLayoutAndroid的引用为drawer)
<DrawerLayoutAndroid ref={(drawer) => { this.drawer = drawer; }} ......
2–定义展开关闭侧滑菜单的方法。
根据上面定义的DrawerLayoutAndroid的引用drawer,来调用源码中openDrawer和closeDrawer方法 。作为自己当前项目展开关闭侧滑菜单的方法。
//打开侧滑栏 onPenLeftDrawer() { this.drawer.openDrawer(); } closeLeftDrawer() { this.drawer.closeDrawer(); }
3–onPress将点击与侧滑菜单的展开和关闭联系起来
定义用于点击展开的按钮TouchableHighlight,其中的onPress点击函数就是调用自己定义的侧滑菜单的展开方函数。于是,当TouchableHighlight被点击时,调用onPenLeftDrawer展开方法。使侧滑菜单展开。
<TouchableHighlight underlayColor="rgb(210, 230, 255)" activeOpacity={0.5} style={styles.touchable} onPress={() => this.onPenLeftDrawer()} //onPress={this.onPenLeftDrawer.bind(this)} > <Text style={{fontSize: 16, justifyContent: 'center'}}>点击我弹出</Text></TouchableHighlight>
由于展开侧滑菜单之后,手势操作或者点击侧滑菜单之外的部分也能使其关闭,所以通过点击使其关闭意义并不大。但是实现方式与上面一样,在侧滑菜单的View中,添加点击控件,绑定closeLeftDrawer关闭方法,就可以用通过点击来关闭。
最终效果:
以上效果完整代码(项目名Test13):
/** * Sample React Native App * https://github.com/facebook/react-native * @flow */import React, {Component} from 'react';import { AppRegistry, StyleSheet, Text, View, PixelRatio, DrawerLayoutAndroid, TouchableHighlight,} from 'react-native';class Test13 extends Component { //打开侧滑栏 onPenLeftDrawer() { this.drawer.openDrawer(); } closeLeftDrawer() { this.drawer.closeDrawer(); } render() { var navigationView = ( <View style={{flex: 1, backgroundColor: 'white'}}> <Text style={{margin: 10, color: '#333', fontSize: 15, textAlign: 'center'}}>侧滑菜单</Text> <Text style={{marginTop: 10, marginLeft: 20, color: '#666', fontSize: 15, textAlign: 'left'}}>账户设置</Text> <Text style={{marginTop: 10, marginLeft: 20, color: '#666', fontSize: 15, textAlign: 'left'}}>支付中心</Text> <TouchableHighlight underlayColor="rgb(210, 230, 255)" activeOpacity={0.5} style={[styles.touchable,{marginTop: 280}]} onPress={this.closeLeftDrawer.bind(this)} > <Text style={{fontSize: 16, justifyContent: 'center'}}>点击关闭侧滑菜单</Text> </TouchableHighlight> </View> ); return ( <DrawerLayoutAndroid ref={(drawer) => { this.drawer = drawer; }} drawerWidth={250} drawerPosition={DrawerLayoutAndroid.positions.Left} renderNavigationView={() => navigationView}> <View style={{flex: 1,}}> <TouchableHighlight underlayColor="rgb(210, 230, 255)" activeOpacity={0.5} style={styles.touchable} onPress={() => this.onPenLeftDrawer()} //onPress={this.onPenLeftDrawer.bind(this)} > <Text style={{fontSize: 16, justifyContent: 'center'}}>点击我弹出</Text> </TouchableHighlight> </View> </DrawerLayoutAndroid> ); }}const styles = StyleSheet.create({ button: { backgroundColor: 'white', padding: 15, borderBottomWidth: StyleSheet.hairlineWidth, borderBottomColor: '#CDCDCD', }, touchable: { backgroundColor: '#fff', padding: 15, borderBottomWidth: StyleSheet.hairlineWidth, borderBottomColor: '#CDCDCD', }});AppRegistry.registerComponent('Test13', () => Test13);
- 【React Native】React Native中DrawerLayoutAndroid通过点击实现展开和关闭
- react-native-DrawerLayoutAndroid
- react native DrawerLayoutAndroid 使用详解
- React-Native使用代码主动控制DrawerLayoutAndroid显示和隐藏
- React Native 组件之DrawerLayoutAndroid(抽屉)
- react-Native ListView中实现单击行展开效果
- react native实现可展开Text控件
- react native实现可展开Text控件
- react native中使用react-native-viewpager实现的商品展示添加点击事件
- react native关闭键盘
- React Native点击
- React-Native ListView中按钮点击变色效果实现
- react-native for android 学习笔记 (1) DrawerLayoutAndroid
- React Native控件之DrawerLayoutAndroid抽屉导航组件讲解
- React Native之DrawerLayoutAndroid仿网易云音乐滑动菜单
- React Native之DrawerLayoutAndroid仿网易云音乐滑动菜单
- 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件讲解(13)
- React native和native交互
- Android7.0中文文档(API)-- OverScroller
- 实现调用Android手机的拍照功能
- Windows环境:Beego环境搭建和bee工具安装使用
- JavaScript概括
- eclipse + cdt + mingw 一个Javaer的Win32
- 【React Native】React Native中DrawerLayoutAndroid通过点击实现展开和关闭
- Data analysis and visualization
- 直方图均衡化python代码实现
- scala将double转换为long
- javascript数组操作
- Unity中UGUI脚本添加Button按钮事件
- 内存拷贝的注意事项
- 理化生探究数字实验室
- 滑动窗口问题