前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >基础篇章:关于 React Native 之 Modal 组件的讲解

基础篇章:关于 React Native 之 Modal 组件的讲解

作者头像
非著名程序员
发布于 2018-02-09 07:17:36
发布于 2018-02-09 07:17:36
2.6K00
代码可运行
举报
文章被收录于专栏:非著名程序员非著名程序员
运行总次数:0
代码可运行

(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间)

Modal是模态视图,它的作用是可以用来覆盖 React Native中根视图的原生视图,Modal模态视图是一种覆盖包围当前内容视图的一个简单方法。

注意:如果你需要如何在您的应用程序的其余部分呈现模态的更多控制,那么可以考虑使用顶级导航(top-level Navigator)。

Modal 属性

照例,我想大家都知道我的习惯了,毕竟官网也是这个顺序,那就是在用人之前,先要了解人,毕竟疑人不用,用人不疑嘛,要想相信一个人,首先得了解一个人嘛。来,看看 Modal 的相关属性。

  • animated bool 是否有动画效果,不过这个属性已经被抛弃了,取之代替的是:animationType
  • animationType (['none', 'slide', 'fade']) 这个animationType属性作用就是如何控制模态动画,有一下三个类型:
    • none 出现的时候不带动画效果
    • fade 带有淡入动画的效果
    • slide 从底部滑动出来的动画效果
  • onRequestClose Platform.OS === 'android' ? PropTypes.func.isRequired : PropTypes.func 这是一个 Android 平台需要的属性,它的作用是当这个模态视图取消或者关闭消失的时候回调这个函数
  • onShow function 当模态视图显示的时候调用此函数
  • transparent bool 布尔值,是否透明,true 将使得在一个透明背景的模式
  • visible bool 布尔值,是否可见
  • onOrientationChange func ios 当在显示模态的方向变化时回调此函数
  • supportedOrientations ios (['portrait', 'portrait-upside-down', 'landscape', 'landscape-left', 'landscape-right']))

实例演示

来,我们大家一起看看这个效果的实现,看完效果就更加直观的能够感受到这个组件的作用和功能了。动态效果图如下:

实例代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Modal,
  Picker,
  Switch,
  TouchableHighlight,
  Text,
  View
} from 'react-native';

class Button extends Component {
  state = {
    active: false,
  };

  _onHighlight = () => {
    this.setState({active: true});
  };

  _onUnhighlight = () => {
    this.setState({active: false});
  };

  render() {
    var colorStyle = {
      color: this.state.active ? '#fff' : '#000',
    };
    return (
      <TouchableHighlight
        onHideUnderlay={this._onUnhighlight}
        onPress={this.props.onPress}
        onShowUnderlay={this._onHighlight}
        style={[styles.button, this.props.style]}
        underlayColor="#a9d9d4">
          <Text style={[styles.buttonText, colorStyle]}>{this.props.children}</Text>
      </TouchableHighlight>
    );
  }
}

export default class ModalDemo extends Component {
  state = {
    animationType: 'none',
    modalVisible: false,
    transparent: false,
  };

  _setModalVisible = (visible) => {
    this.setState({modalVisible: visible});
  };

  _setAnimationType = (type) => {
    this.setState({animationType: type});
  };

  _toggleTransparent = () => {
    this.setState({transparent: !this.state.transparent});
  };
  render() {
     var modalBackgroundStyle = {
      backgroundColor: this.state.transparent ? 'rgba(0, 0, 0, 0.5)' : '#f5fcff',
    };
    var innerContainerTransparentStyle = this.state.transparent
      ? {backgroundColor: '#fff', padding: 20}
      : null;
    var activeButtonStyle = {
      backgroundColor: '#ddd'
    };
    return (
       <View>
        <Modal
          animationType={this.state.animationType}
          transparent={this.state.transparent}
          visible={this.state.modalVisible}
          onRequestClose={() => this._setModalVisible(false)}
          >
          <View style={[styles.container, modalBackgroundStyle]}>
            <View style={[styles.innerContainer, innerContainerTransparentStyle]}>
              <Text>This modal was presented {this.state.animationType === 'none' ? 'without' : 'with'} animation.</Text>
              <Button
                onPress={this._setModalVisible.bind(this, false)}
                style={styles.modalButton}>
                Close
              </Button>
            </View>
          </View>
        </Modal>
        <View style={styles.row}>
          <Text style={styles.rowTitle}>Animation Type</Text>
          <Button onPress={this._setAnimationType.bind(this, 'none')} style={this.state.animationType === 'none' ? activeButtonStyle : {}}>
            none
          </Button>
          <Button onPress={this._setAnimationType.bind(this, 'slide')} style={this.state.animationType === 'slide' ? activeButtonStyle : {}}>
            slide
          </Button>
          <Button onPress={this._setAnimationType.bind(this, 'fade')} style={this.state.animationType === 'fade' ? activeButtonStyle : {}}>
            fade
          </Button>
        </View>

        <View style={{marginTop:50,flexDirection: 'row',alignItems: 'center',justifyContent: 'center'}}>
          <Text style={{color:'grey',fontWeight: 'bold',marginRight:20}}>Transparent</Text>
          <Switch value={this.state.transparent} onValueChange={this._toggleTransparent} />
        </View>

        <Button onPress={this._setModalVisible.bind(this, true)}>
          Present
        </Button>
      </View>
    );
  }
}

const styles = StyleSheet.create({
 container: {
    flex: 1,
    justifyContent: 'center',
    padding: 20,
  },
  innerContainer: {
    borderRadius: 10,
    alignItems: 'center',
  },
  row: {
    alignItems: 'center',
    flex: 1,
    flexDirection: 'row',
    marginBottom: 20,
  },
  rowTitle: {
    flex: 1,
    fontWeight: 'bold',
  },
  button: {
    borderRadius: 5,
    flex: 1,
    height: 44,
    alignSelf: 'stretch',
    justifyContent: 'center',
    overflow: 'hidden',
  },
  buttonText: {
    fontSize: 18,
    margin: 5,
    textAlign: 'center',
  },
  modalButton: {
    marginTop: 10,
  },
  pickerItem: {
    fontSize: 16,
  },
});

AppRegistry.registerComponent('ModalDemo', () => ModalDemo);

这个例子内容比较多,大家仔细看看,最好动手实践一下,这样才能掌握的更加熟练。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【赵渝强老师】使用PostgreSQL客户端工具
在PostgreSQL数据库服务器端安装配置完成以后,便可以使用客户端工具连接到服务器端进行数据库操作了。PostgreSQL支持多种客户端的连接,这里重点介绍psql和pgAdmin这两款PostgreSQL客户端工具的使用方法。
赵渝强老师
2025/03/09
1180
【赵渝强老师】使用PostgreSQL客户端工具
CVE-2020-7471:Django SQL注入漏洞复现
Django是一个由python编写的开源Web应用框架。采用了MTV的框架模式,即模板M、视图V和模板T。Django也是遵循 MVC 设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代表模型、视图、控制器。
Timeline Sec
2020/12/16
8690
win10的NET Framework 3.5离线安装
win10的操作系统无法找到用户和组,无法获取管理员权限       1、使用“Win+R”快捷键或右键单击左下角,进入运行界面;输入“netplwiz”进入用户帐户设置界面。   2、选择要增加权限的账户,点击属性。   3、点击组成员,点选“管理员”。   这样就能把一般的标准帐户升级为管理员帐户了,用户可以获得使用和设置的权限。同理,想解除管理员权限,也是通过这样的步骤来完成。 ———————————————— MS酋长很早以前已经分享了《Win10离线安装.NET Framework 3.5的方法技巧》,同时分享了exe格式的.NET Framework 3.5离线安装包下载地址。但有部分网友反映安装过程中会出现错误提示安装失败,那么今天MS酋长就再分享一下cab格式的.NET Framework 3.5离线安装包下载地址,以及安装方法。
用户3519280
2023/07/06
3.6K0
win10的NET Framework 3.5离线安装
Windows中安装 MySQL8.0.30 数据库
访问MySQL官网下载安装文件https://downloads.mysql.com/archives/community/。 如下图所示,点击页面中的“DOWNLOAD”按钮。
BUG弄潮儿
2023/02/24
1.5K0
Windows中安装 MySQL8.0.30 数据库
互联网厂工必知必会:SQL基础篇
来源 | 《SQL 基础教程》 PostgreSQL 的安装和连接设置 那么就让我们赶快按照下面的步骤来安装 PostgreSQL 吧。 01 安装步骤 ① 下载安装程序 大家可以从 PostgreSQL 的下载页面下载安装程序。 本书将会介绍使用 64 位版的 Windows 安装程序(Win x86-64)在 Windows 10(64 位)系统中安装 PostgreSQL 的步骤,请大家结合自身实际下载相应的安装程序。例如,如果大家使用的是 32 位的 Windows 操作系统,请下载“Win x
CSDN技术头条
2018/03/26
1.4K0
互联网厂工必知必会:SQL基础篇
【MySQL】下载安装以及SQL介绍
以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端。
陶然同学
2023/10/14
3030
【MySQL】下载安装以及SQL介绍
MySQL入门
SQL(结构化查询语言)是一种广泛应用于管理和操作关系数据库的标准语言,发挥着重要作用。无论采用何种开发语言或方向,Java、C、C++、Python、Scala等编程语言均支持SQL。
Heaven645
2024/08/09
751
MySQL入门
Ubuntu PostgreSQL安装和配置
config /etc/postgresql/9.5/main data /var/lib/postgresql/9.5/main locale en_US.UTF-8 socket /var/run/postgresql port 5432
qubianzhong
2019/07/01
1.8K0
Ubuntu PostgreSQL安装和配置
Win11 安装 PostgreSQL 报错解决方案
在 Win11 系统中安装 PostgreSQL 时,可能会遇到“Problem running post-install”的报错情况。这一报错给用户带来了极大的困扰,使得安装过程无法顺利进行。
井九
2024/10/18
7220
【DB宝70】在Windows中绿色安装PostgreSQL 13.3数据库
PG安装方法很多,和MySQL类似,给用户提供很大的选择空间。如:RPM包安装(在线、离线)、源码编译安装、系统自带、二进制、NDB安装等。
AiDBA宝典
2021/09/17
1.6K0
如何创建新的管理员账户?
是山河呀
2025/03/22
830
Oracle11g安装详细步骤(图文教程)
Oracle11g是J2EE初学者必学的数据库之一,下面就给大家介绍一下Oracle11g数据库的详细安装步骤。
全栈程序员站长
2022/09/15
12.9K0
Oracle11g安装详细步骤(图文教程)
MySQL 学习一:零基础增删改查小白简单入门上手教程(附 MySQL 下载地址)
MySQL 是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。 MySQL 是开放源代码的,因此任何人都可以在 General Public License 的许可下下载并根据个性化的需要对其进行修改。 MySQL 因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL 是管理内容最好的选择。
白鹿第一帅
2021/03/02
1.5K0
MySQL 学习一:零基础增删改查小白简单入门上手教程(附 MySQL 下载地址)
如何安装python win7
Python是一种广泛使用的高级编程语言,因其易于学习和强大的功能而受到开发者的青睐。本文将带你一步步完成在Windows 7操作系统上安装Python的过程。无论你是初学者还是有经验的开发者,本文都能帮助你顺利完成安装。
秋月叶落
2025/02/27
1140
如何安装python win7
如何在CentOS 7上安装和使用PostgreSQL
关系数据库管理系统是许多网站和应用程序的关键组件。它们提供了一种存储,组织和访问信息的结构化方法。
八十岁的背影
2018/10/09
5K0
【数据库系列】PostgreSQL 数据库连接
在当今信息技术飞速发展的时代,数据库作为数据存储和管理的核心组件,扮演着至关重要的角色。PostgreSQL,作为一种高级的开源对象关系型数据库系统,因其强大的功能和灵活性而广受欢迎。
kwan的解忧杂货铺
2024/12/12
960
MySQL安装文档
https://downloads.mysql.com/archives/community/
777nx
2023/05/02
5020
MySQL安装文档
kong安装与部署
目标任务:kong: v0.14.x, postgresql: v10.5(注意:psql版本必须与kong版本对应)
全栈程序员站长
2022/09/13
1.3K0
安装软件时提示“权限不足”,如何解决?
是山河呀
2025/03/08
3770
PostGIS导入导出ESRI Shapefile数据
PostGIS作为PostgreSQL数据库的空间扩展,提供了对空间数据管理的支持。对于空间矢量数据,PostGIS提供了Geometry和Geography俩种类型用于空间对象的存储,Geometry使用笛卡尔坐标系,而Geography使用球面坐标系(默认是WGS84坐标系)。对于空间栅格数据,则提供了Raster类型。
卡尔曼和玻尔兹曼谁曼
2019/01/22
3.7K0
PostGIS导入导出ESRI Shapefile数据
相关推荐
【赵渝强老师】使用PostgreSQL客户端工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文