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

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

一、引言


   本篇博客将介绍如何开发一款简易的ReactNative小应用汇率换算器。本应用仅作为学习使用,其支持在人民币与美元间进行汇率计算。汇率计算器应用主要分为两部分:键盘与显示屏。键盘提供给与用户进行输入,在显示屏上进行汇率换算结果的显示。复杂的界面无非是简单组件的组合使用,因此,在进行开发之前,我们可以思考可能需要使用到的独立组件的开发,例如键盘按钮的开发,有键盘按钮组成的键盘的开发,显示屏开发等。首先创建一个初始的ReactNative工程,将index.ios.js与index.android.js文件中的内容全部删掉。在项目根目录中新建4个目录,分别为const、controller、image和view。这4个目录用于存放后面我们需要新建的静态文件,控制器文件,图片素材和视图文件。


二、用户键盘的封装


   在view文件夹下新建一个KeyButton.js文件,其用来创建键盘上的独立按钮,将其实现如下:


import React, { Component,PropTypes } from 'react';

import {

TouchableHighlight,

Text,

StyleSheet,

Image

} from 'react-native';


export default class KeyButton extends Component{

render(){

       //根据number属性来做判断

 if (this.props.number == '删') {

  return(

  <TouchableHighlight

  underlayColor='#f06d30'

  style={[keyButtonStyles.buttonStyleNormal,{alignItems:'center'}]}

  onPress={this.props.buttonPress.bind(this,this.props.number)}>

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

  </TouchableHighlight>

  );

 };

 //特殊按钮需要状态来判断

 var buttonStyle;

 if(this.props.number == 'C' || this.props.number == '='){

           buttonStyle = keyButtonStyles.buttonStyleSpecial;

 }else{

  buttonStyle =  keyButtonStyles.buttonStyleNormal;

 }

 return(

  <TouchableHighlight

  underlayColor='#f06d30'

  style={buttonStyle}

  onPress={this.props.buttonPress.bind(this,this.props.number)}>

   <Text style={keyButtonStyles.textStyle}>{this.props.number}</Text>

  </TouchableHighlight>

 );

}

}

//配置样式列表

const keyButtonStyles = StyleSheet.create({

   //正常按钮样式

buttonStyleNormal:{

 flex:1,

 backgroundColor:'#323637',

 justifyContent: 'center',

},

   //特殊按钮样式

buttonStyleSpecial:{

 flex:1,

 backgroundColor:'#f06d30',

 justifyContent: 'center',

},

   //文本样式

textStyle:{

 color:'white',

 textAlign:'center',

 fontSize:30

}

});

上面代码中预留number属性作为按钮的标题,不同的按钮可能带有不同的样式,同样通过这个属性来做区分。按钮的触发事件绑定给了buttonPress属性,并且在按钮触发执行时,将按钮的number属性传递出去。


   在const文件夹下创建一个Const,js文件,这个文件中用来定义全局的一些样式,实现如下:


import React, { Component } from 'react';

import {

StyleSheet

 } from 'react-native';



export default mainViewStyles = StyleSheet.create({

   //主界面容器的样式

container:{

 flex:1,

 flexDirection:'column',

 backgroundColor:'black'

},

   //显示屏的样式

screenView:{

 flex:3,

 backgroundColor:'#f06d30'

},

   //键盘的样式

keyboardView:{

 flex:7,

 backgroundColor:'#323637'

}

});

   在View文件夹下新建一个KeyboardView.js文件,将其作为键盘视图类,将其实现如下:


import React, { Component } from 'react';

import {

View,

Text,

StyleSheet

 } from 'react-native';

import KeyButton from './KeyButton';

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

export default class KeyboardView extends Component {

render(){

 return(

  <View style={mainViewStyles.keyboardView}>

   <View style={keyboardViewStyles.keyboardRow}>

    <KeyButton number='1' buttonPress={this.props.buttonPress}/>

    <KeyButton number='2' buttonPress={this.props.buttonPress}/>

    <KeyButton number='3' buttonPress={this.props.buttonPress}/>

    <KeyButton number='删' buttonPress={this.props.buttonPress}/>

   </View>

   <View style={keyboardViewStyles.keyboardRow}>

    <KeyButton number='4' buttonPress={this.props.buttonPress}/>

    <KeyButton number='5' buttonPress={this.props.buttonPress}/>

    <KeyButton number='6' buttonPress={this.props.buttonPress}/>

    <KeyButton number='0' buttonPress={this.props.buttonPress}/>

   </View>

   <View style={keyboardViewStyles.keyboardRow}>

    <KeyButton number='7' buttonPress={this.props.buttonPress}/>

    <KeyButton number='8' buttonPress={this.props.buttonPress}/>

    <KeyButton number='9' buttonPress={this.props.buttonPress}/>

    <KeyButton number='.' buttonPress={this.props.buttonPress}/>

   </View>

   <View style={keyboardViewStyles.keyboardRow}>

    <KeyButton number='C' buttonPress={this.props.buttonPress}/>

    <KeyButton number='-' buttonPress={this.props.buttonPress}/>

    <KeyButton number='+' buttonPress={this.props.buttonPress}/>

    <KeyButton number='=' buttonPress={this.props.buttonPress}/>

   </View>

  </View>

 );

}

}

const keyboardViewStyles = StyleSheet.create({

keyboardRow:{

 flex:1,

 backgroundColor:'black',

 flexDirection:'row'

}

});

上面以九宫格的布局模式创建了16个功能按钮,并且将按钮的点击事件属性绑定给键盘的buttonPress属性,由上层视图来做处理,这里使用了flex权重的布局模式。


目录
相关文章
|
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

热门文章

最新文章

推荐镜像

更多