ReactNative应用之汇率换算器开发全解析(二)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: ReactNative应用之汇率换算器开发全解析

   至此,键盘部分先告一段落,我们需要对显示屏进行开发,在View文件夹下新建一个ScreenView.js文件,将其作为显示屏视图类,显示屏类和键盘比起来要复杂许多,因为其要实现各种屏幕操作功能,例如回退,删除,清空,计算等,实现如下:


import React, { Component } from 'react';

import {

View,

Text,

StyleSheet,

TouchableHighlight,

Image

 } from 'react-native';

import mainViewStyles from '../const/Const';

export default class ScreenView extends Component {

constructor(props) {

  super(props);

     //这三个状态分别用来标记是美元转人民币或者人民币转美元,美元数,人民币数

  this.state = {

   transUS:true,

   USMoney:'0',

 CHMoney:'0'

  };

  let __this = this;

     //进行美元转人民币或者人民币转美元转换时调用

  this.change = function(){

 __this.setState({transUS:!__this.state.transUS});

  };

  //数字类按钮被点击触发的方法

  this.buttonClick = function(count){

   var us=__this.state.USMoney,ch=__this.state.CHMoney;

   if (__this.state.transUS) {

     if (us=='0') {us=count;}else{us=__this.state.USMoney+count;};

    }else{

     if (ch=='0') {ch=count;}else{ch=__this.state.CHMoney+count;};

    };

   __this.setState({

    USMoney:us,

    CHMoney:ch

   });

  };

  //清除按钮被点击触发的方法

  this.clear = function(){

   __this.setState({

    USMoney:'0',

    CHMoney:'0'

   });

  };

  //回退按钮被点击触发的方法

  this.delete = function(){

 if (__this.state.transUS) {

  if (__this.state.USMoney.length>1) {

   let newUS = __this.state.USMoney.substring(0,__this.state.USMoney.length-1);

   __this.setState({USMoney:newUS});

  }else if(__this.state.USMoney>'0'){

   __this.setState({USMoney:'0'});

  }

 }else{

  if (__this.state.CHMoney.length>1) {

   let newCH = __this.state.CHMoney.substring(0,__this.state.CHMoney.length-1);

   __this.setState({CHMoney:newCH});

  }else if(__this.state.CHMoney>'0'){

   __this.setState({CHMoney:'0'});

  }

 }

  };

  //减号触发的方法

  this.sub = function(){

   if (__this.state.transUS) {

    if(__this.state.USMoney>'0'){

      let newUS = (parseInt(__this.state.USMoney)-1).toString();

   __this.setState({USMoney:newUS});

  }

 }else{

  if(__this.state.CHMoney>'0'){

   let newCH = (parseInt(__this.state.CHMoney)-1).toString();

   __this.setState({CHMoney:newCH});

  }

 }

  };

  //加号触发的方法

  this.add = function(){

   if (__this.state.transUS) {

    let newUS = (parseFloat(__this.state.USMoney)+1).toString();

  __this.setState({USMoney:newUS});

 }else{

  let newCH = (parseFloat(__this.state.CHMoney)+1).toString();

  __this.setState({CHMoney:newCH});

 }

  };

  //进行汇率转换

  this.trans = function(){

   if (__this.state.transUS) {

    let us = parseFloat(__this.state.USMoney);

    __this.setState({CHMoney:(us*6.7).toFixed(2).toString()});

 }else{

  let ch = parseFloat(__this.state.CHMoney);

    __this.setState({USMoney:(ch/6.7).toFixed(2).toString()});

 }

  }

}


render(){

 let transText = this.state.transUS?"从美元":"从人民币";

 let transToText = this.state.transUS?"到人民币":"到美元";

 let topText = this.state.transUS?this.state.USMoney+'$':this.state.CHMoney+'¥';

 let bottomText = this.state.transUS?this.state.CHMoney+'¥':this.state.USMoney+'$';

 return(

  <View style={mainViewStyles.screenView}>

   <Text style={{

    color:'white',

    textAlign:'right',

    marginRight:20,

    marginTop:20,

    fontSize:17

   }}>{transText}</Text>

   <Text style={{

    color:'white',

    textAlign:'right',

    fontSize:37,

    marginRight:20,

   }}>{topText}</Text>

   <View style={{

    flexDirection:'row',

    zIndex:100,

    marginTop:-7.5

   }}>

   <TouchableHighlight

    underlayColor='#f06d30'

    style={{

    left:50,

    marginTop:0,

   }} onPress={this.change}>

    <Image source={require('../image/exchange.png')}/>

   </TouchableHighlight>

   <View style={{

    marginLeft:70,

    height:1,

    backgroundColor:'white',

    marginTop:10,

    flex:1

   }}></View>

   </View>

   <Text style={{

    marginTop:10,

    color:'white',

    textAlign:'right',

    fontSize:17,

    marginRight:20,

    marginTop:-3,

    zIndex:99

   }}>{transToText}</Text>

   <Text style={{

    color:'white',

    textAlign:'right',

    fontSize:37,

    marginRight:20

   }}>{bottomText}</Text>

  </View>

 );

}

}

   封装好了键盘与显示屏,我们需要将其联动结合起来,在View文件夹下再创建一个MainView.js文件,实现如下:


import React, { Component } from 'react';

import {

View,

Text,

StyleSheet

 } from 'react-native';

import KeyboardView from './KeyboardView';

import mainViewStyles from '../const/Const';

import ScreenView from './ScreenView';

// 汇率换算器主界面视图


export default class MainView extends Component {

 constructor(props) {

   super(props);

   this.state = {};

 }

 render() {

   let __this = this;

   return (

     <View style={mainViewStyles.container}>

       <ScreenView ref="screenView"/>

       <KeyboardView buttonPress={function(title){

         __this.buttonPress(title);

       }}/>

     </View>

   )

 }

 buttonPress(title){

   //根据按键类型进行相关功能调用

   if (title=='删') {

     this.refs.screenView.delete();

   }else if(title=='C'){

     this.refs.screenView.clear();

   }else if(title=='-'){

     this.refs.screenView.sub();

   }else if(title=='+'){

     this.refs.screenView.add();

   }else if(title=='='){

     this.refs.screenView.trans();

   }else{

     this.refs.screenView.buttonClick(title);

   }

 

 }


}


到此,ReactNative应用汇率转换器的核心功能已经全部完成了,此应用只有一个界面,其实我们已经可以直接将MainView组建注册为项目的根组建,但是如果是多界面的应用,我们最好再使用Controller将其进行封装,在Controller文件夹下创建一个MainViewController.js文件,为其提供一个view()方法,如下:



import React, { Component } from 'react';

import { AppRegistry, Text } from 'react-native';

import MainView from '../View/MainView';

export class MainViewController{

   view(){

 return(

  <MainView />

 );

}

}

修改index.ios.js与index.android.js文件如下:


import React, { Component } from 'react';

import {

 AppRegistry,

 Text

} from 'react-native';

import {

 MainViewController

} from './Controller/MainViewController';


class News extends Component {

 render() {

   let controller = new MainViewController();

   return controller.view();

 }

}


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

运行项目,效果如下图:


iOS:

image.png




android:


image.png


本项目的完整代码github地址如下:


https://github.com/ZYHshao/ReactNative-ExchangeRate

目录
相关文章
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
85 10
|
7天前
|
安全 API 数据安全/隐私保护
速卖通AliExpress商品详情API接口深度解析与实战应用
速卖通(AliExpress)作为全球化电商的重要平台,提供了丰富的商品资源和便捷的购物体验。为了提升用户体验和优化商品管理,速卖通开放了API接口,其中商品详情API尤为关键。本文介绍如何获取API密钥、调用商品详情API接口,并处理API响应数据,帮助开发者和商家高效利用这些工具。通过合理规划API调用策略和确保合法合规使用,开发者可以更好地获取商品信息,优化管理和营销策略。
|
28天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
28天前
|
机器学习/深度学习 搜索推荐 API
淘宝/天猫按图搜索(拍立淘)API的深度解析与应用实践
在数字化时代,电商行业迅速发展,个性化、便捷性和高效性成为消费者新需求。淘宝/天猫推出的拍立淘API,利用图像识别技术,提供精准的购物搜索体验。本文深入探讨其原理、优势、应用场景及实现方法,助力电商技术和用户体验提升。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
34 1
|
2月前
|
监控 前端开发 安全
如何开发一个网站:全面解析与实战指南
在数字化时代,网站是企业和个人展示形象、传播信息的关键平台。本文提供从规划、设计、开发、上线到后期维护的全方位网站开发指南,涵盖明确目标、分析用户、设定功能需求、设计风格、技术选型、测试部署及优化升级等内容,帮助你打造既美观又实用的网站。
81 4
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
Java 测试技术 API
Java 反射机制:深入解析与应用实践
《Java反射机制:深入解析与应用实践》全面解析Java反射API,探讨其内部运作原理、应用场景及最佳实践,帮助开发者掌握利用反射增强程序灵活性与可扩展性的技巧。
117 4

热门文章

最新文章

推荐镜像

更多