React Native之Modal实现自定义Dialog
2016-07-28 12:24
1001 查看
针对普通的弹框,React Native(RN)给我们提供了有Alert,但使用局限性很大,没有办法自定义,要实现自定义的弹框,我们应该如何来实现呢,这里提供两种方法:第一就是native本地来实现,然后暴露给RN来条用,第二就是使用组件Modal来实现,第一种方法这里就不写了,这里讲解下用Modal如何来实现。
首先我们先来了解下Modal是什么。
Modal组件可以用来覆盖包含React Native根视图的原生视图(如UIViewController,Activity)。
在嵌入React Native的混合应用中可以使用Modal。Modal可以使你应用中RN编写的那部分内容覆盖在原生视图上显示。
常见的属性:
animationType: enum('none', 'slide', 'fade') 动画类型
onRequestClose: Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func
onShow: function
显示完毕的回调方法
transparent: bool
是否为透明,默认为不透明,弹框需要将这个设置成 true.
visible: bool
是否显示
示例:
我们先创建一个ShareModal.返回一个Modal组件。
<Modal
animationType='fade'
transparent={true}
visible={this.state.visible}
onShow={this.onShow.bind(this)}
onRequestClose={() =>console.log('onRequestClose...')} >
<View style={[styles.modalStyle,backgroundStyle]}>
<View style={styles.subView}>
<Text style={{fontSize:18}}>选择分享方式</Text>
<View style={{flex:1,flexDirection:'row'}}>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_wechattimelineicon.png')}/>
<Text>微信朋友圈</Text>
</View>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_wechaticon.png')}/>
<Text>微信好友</Text>
</View>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_weiboicon.png')}/>
<Text>新浪微博</Text>
</View>
</View>
<View style={{width:Util.size.width,height:Util.pixel,backgroundColor:'#ddd'}}/>
<Button onPress={this.close.bind(this,false)}>取消</Button>
</View>
</View>
</Modal>
效果图:
通过Modal定义的弹框,有两个不足.
一:背景透明层也是Modal的一部分,如果animationType是slide方式,则透明背景会一起滑动,体验很不友好,fade模式相对好点.
二:没有类似于原生的的setCancelable方法,不过我们可以模拟实现这种效果,就是在透明区域加一层view,点击该层view则close当前modal.
RN开发群:527459711.欢迎大伙加入.
首先我们先来了解下Modal是什么。
Modal组件可以用来覆盖包含React Native根视图的原生视图(如UIViewController,Activity)。
在嵌入React Native的混合应用中可以使用Modal。Modal可以使你应用中RN编写的那部分内容覆盖在原生视图上显示。
常见的属性:
animationType: enum('none', 'slide', 'fade') 动画类型
onRequestClose: Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func
onShow: function
显示完毕的回调方法
transparent: bool
是否为透明,默认为不透明,弹框需要将这个设置成 true.
visible: bool
是否显示
示例:
我们先创建一个ShareModal.返回一个Modal组件。
<Modal
animationType='fade'
transparent={true}
visible={this.state.visible}
onShow={this.onShow.bind(this)}
onRequestClose={() =>console.log('onRequestClose...')} >
<View style={[styles.modalStyle,backgroundStyle]}>
<View style={styles.subView}>
<Text style={{fontSize:18}}>选择分享方式</Text>
<View style={{flex:1,flexDirection:'row'}}>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_wechattimelineicon.png')}/>
<Text>微信朋友圈</Text>
</View>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_wechaticon.png')}/>
<Text>微信好友</Text>
</View>
<View style={styles.item}>
<Image resizeMode='contain' style={styles.image} source={require('./../../images/share_weiboicon.png')}/>
<Text>新浪微博</Text>
</View>
</View>
<View style={{width:Util.size.width,height:Util.pixel,backgroundColor:'#ddd'}}/>
<Button onPress={this.close.bind(this,false)}>取消</Button>
</View>
</View>
</Modal>
效果图:
通过Modal定义的弹框,有两个不足.
一:背景透明层也是Modal的一部分,如果animationType是slide方式,则透明背景会一起滑动,体验很不友好,fade模式相对好点.
二:没有类似于原生的的setCancelable方法,不过我们可以模拟实现这种效果,就是在透明区域加一层view,点击该层view则close当前modal.
RN开发群:527459711.欢迎大伙加入.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories