[RN] React Native 自定义 底部 弹出 选择框 实现
React Native 自定义 底部选择框 实现
效果如图所示:
实现方法:
一、组件封装
- CustomAlertDialog.js
- import React, {Component} from 'react';
- import {Dimensions, Modal, StyleSheet, Text, TouchableOpacity, View} from 'react-native';
- const {width} = Dimensions.get('window');
- export default class CustomAlertDialog extends Component {
- constructor(props) {
- super(props);
- this.state = {
- isVisible: this.props.show,
- };
- this.entityList = this.props.entityList;
- }
- componentWillReceiveProps(nextProps) {
- this.setState({isVisible: nextProps.show});
- }
- closeModal() {
- this.setState({
- isVisible: false
- });
- this.props.closeModal(false);
- }
- renderItem(item, i) {
- return (
- <TouchableOpacity key={i} onPress={this.choose.bind(this, i)} style={styles.item}>
- <Text style={styles.itemText}>{item}</Text>
- </TouchableOpacity>
- );
- }
- choose(i) {
- if (this.state.isVisible) {
- this.props.callback(i);
- this.closeModal();
- }
- }
- renderDialog() {
- return (
- <View style={styles.modalStyle}>
- <View style={styles.optArea}>
- {
- this.entityList.map((item, i) => this.renderItem(item, i))
- }
- </View>
- </View>
- )
- }
- render() {
- return (
- <View style={{flex: }}>
- <Modal
- transparent={true}
- visible={this.state.isVisible}
- animationType={'fade'}
- onRequestClose={() => this.closeModal()}>
- <TouchableOpacity style={styles.container} activeOpacity={}
- onPress={() => this.closeModal()}>
- {this.renderDialog()}
- </TouchableOpacity>
- </Modal>
- </View>
- );
- }
- }
- const styles = StyleSheet.create({
- container: {
- flex: ,
- backgroundColor: 'rgba(0, 0, 0, 0.5)',
- },
- modalStyle: {
- position: "absolute",
- left: ,
- bottom: ,
- width: width,
- flex: ,
- flexDirection: "column",
- backgroundColor: '#ffffff',
- },
- optArea: {
- flex: ,
- flexDirection: 'column',
- marginTop: ,
- marginBottom: ,
- },
- item: {
- width: width,
- height: ,
- paddingLeft: ,
- paddingRight: ,
- alignItems: 'center',
- },
- itemText: {
- fontSize: ,
- },
- cancel: {
- width: width,
- height: ,
- marginTop: ,
- alignItems: 'center',
- backgroundColor: '#ffffff'
- },
- });
使用
TestCustomAlert.js
- import React, {Component} from "react";
- import {StyleSheet, Text, TouchableHighlight, View,} from 'react-native';
- import CustomAlertDialog from "./CustomAlertDialog";
- const typeArr = ["不限", "男", "女"];
- export default class TestCustomAlert extends Component {
- constructor(props) {
- super(props);
- this.state = {
- typeName: '性别',
- type: ,
- showTypePop: false,
- }
- }
- _openTypeDialog() {
- this.setState({showTypePop: !this.state.showTypePop})
- }
- render() {
- return (
- <View style={{flex: }}>
- <TouchableHighlight onPress={() => this._openTypeDialog()} style={styles.button}
- underlayColor="#a5a5a5">
- <Text>{this.state.typeName}-{this.state.type}</Text>
- </TouchableHighlight>
- <CustomAlertDialog entityList={typeArr} callback={(i) => {
- this.setState({
- type: i,
- typeName: typeArr[i],
- })
- }} show={this.state.showTypePop} closeModal={(show) => {
- this.setState({
- showTypePop: show
- })
- }}/>
- </View>
- );
- }
- }
- const styles = StyleSheet.create({
- button: {
- margin: ,
- backgroundColor: 'white',
- padding: ,
- borderBottomWidth: StyleSheet.hairlineWidth,
- borderBottomColor: '#cdcdcd'
- },
- });
本博客地址: wukong1688
本文原文地址:https://www.cnblogs.com/wukong1688/p/11038382.html
转载请著名出处!谢谢~~
[RN] React Native 自定义 底部 弹出 选择框 实现的更多相关文章
- [deviceone开发]-底部弹出选择
一.简介 个人上传的第一个示例源码,两天空闲时间写的,一点简单组件,写的挺乱还没啥注释,仅供新手学习. 底部弹出选择,可滑动选择选项,如果停留在选项中间,可自动校正位置,加了一点简单的动画效果,需要的 ...
- 【ABAP系列】SAP ALV 导出报表数据 始终使用选定的格式”,一旦勾上,就再也不会弹出选择框了。
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ALV 导出报表数据 始 ...
- [RN] React Native 自定义导航栏随滚动渐变
React Native 自定义导航栏随滚动渐变 实现效果预览: 代码实现: 1.定义导航栏 NavPage.js import React, {Component} from 'react'; im ...
- 微信小程序之 动画 —— 自定义底部弹出层
wxml: <view class='buy' bindtap='showBuyModal'>立即购买</view> <!-- 点击立即购买 弹出购买遮罩层 --> ...
- Jquery实现弹出选择框选择后返回,支持多级分类
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- appium+python自动化98-非select弹出选择框定位解决
前言 遇到问题:document.getElementsByClassName(...)[0] is undefined 选择框如果是select标签的,可以直接用select专用的方法去定位点击操作 ...
- 框架-弹出选择框(Jquery传递Json数组)
给一个button按钮,执行方法 Json传值$("body").on("click", "#btnsure", function() { ...
- 微信小程序之自定义底部弹出框动画
最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view ...
- Android仿IOS底部弹出选择菜单ActionSheet
使用Dialog的实现方式,解决原ActionSheet使用Fragment实现而出现的部分手机取消按钮被遮盖的问题 java部分代码: import android.app.Dialog; impo ...
随机推荐
- git 用 diff 来检查改动
用 diff 来检查改动 项目的开发是由无数个微小的改动组成的.了解项目开发过程的关键就是要搞清楚每一个改动.当然你可以使用 “git status” 命令或更简单的 “git log” 命令来打印出 ...
- Blend Brush介绍
原文:Blend Brush介绍 这篇文章会介绍 Blend怎么设置Brush 全局画刷 1)blend面板的介绍 这5个rectangle分别对应 blend中的 5个设置 1 设置无颜色 2 设置 ...
- MySQL job/定时任务/event 学习
参考文章: https://blog.csdn.net/qq_21108311/article/details/82589850 https://blog.csdn.net/qq_27238185/a ...
- .net mvc 几种跨域获取数据方案
方案一: 在web.conflg配置文件system.webServer节点中添加以下节点配置 <!--允许 "所有网站" 跨域访问写法:--><httpProt ...
- PyCharm使用分享
常用快捷键 PyCharm的快捷键可以通过Setting->keymap查看和设置,如果不知道具体在哪个位置,可以在搜索框中搜索 如果不习惯PyCharm默认的快捷键,也不想去设置,比如习惯了使 ...
- php中,5行代码实现无限级分类
<?php /** * 此方法由@Tonton 提供 * http://my.oschina.net/u/918697 * @date 2012-12-12 */function genTree ...
- Flask简介及使用
目录 Flask简介 wsgiref wsgiref简单应用 两个依赖 werkzeug Jinja2 简单使用 安装 flask快速使用 Django与Flask返回值的对比 Flask简介 F ...
- OKHttp和NumberProgressbar组建强大的Android版本更新功能
你们看过韩国电影<奇怪的她>不?女主角是不是超级漂亮的.......好啦,扯正事吧,先看看女神照片. 公司新项目用到了OKHttp网络框架,在下载文件这块都蒙圈啦,再查查资料就一个Reso ...
- Git的下载安装
下载地址:https://git-scm.com/download/win 命令: git add ... ---将资源放到缓存区域 git commit -m "提交说明" ...
- day 69作业
""" 1.按照上方 知识点总结 模块,总结今天所学知识点: 2.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/t ...