欢迎界面搭建完毕,我们接下来需要做的就是搭建应用程序的主体框架啦。首先我们看一下首页的截图:

  从图中看到,我将首页分为了三部分:用黑色矩形表示的头部,绿色表示的内容和红色表示的底部。

  下面我们需要解决的是红色部分。在iOS中想要实现这个效果很简单,只需要使用react-native提供的组件TabBarIOS就可以啦。但是却没有提供Android的类似的组件。为了解决这个问题,我想了三种解决方式,第一种是分别为iOS和Android搭建界面,第二种是使用他人封装好的组件,第三种就是自己写一个。最后我选择了第三种,原因是如果使用第一种方式android的界面还是自己搭,而第二种我找了几个,发现样式的可定制性参差不齐,用了不知道会出什么事情。

  从图片中我们很容易看出它充当的是页面跳转的作用,也可以认为它充当了一个路由的作用。我们点击不同的按钮跳转到相应的界面。

  MainRoute.js

 'use strict'

 import React from 'react-native'
import Icon from 'react-native-vector-icons/FontAwesome'
import MainScreen from './MainScreen'
import LoginScreen from './UserLRScreen/LoginScreen'
import RecommendScreen from './RecommendScreen'
import SettingScreen from './SettingScreen'
var {Platform} = React var {
StyleSheet,
View,
TouchableOpacity,
PropTypes
} = React const COLOR = ['gray', '#ffffff'] class MainRoute extends React.Component {
static propTypes = {
navigator: PropTypes.object,
graphics: PropTypes.object
};
constructor (props) {
super(props)
var navigator = props.navigator
this.state = {
choice: 1,
screen: <MainScreen navigator={navigator} />
}
}
render () {
return (
<View style={styles.container}>
<View style={styles.viewShow}>
{this.state.screen}
</View>
<View style={styles.bottom}>
<TouchableOpacity style={styles.bottomButton} activeOpacity={0.1} onPress ={() => this.tabColor(1)}>
<Icon name='star' size={25} style={[styles.Icon, {color: this.state.choice === 1 ? COLOR[1] : COLOR[0]}]}/>
</TouchableOpacity>
<TouchableOpacity style={styles.bottomButton} onPress ={() => this.tabColor(2)} >
<Icon name='compass' size={25} style={[styles.Icon, {color: this.state.choice === 2 ? COLOR[1] : COLOR[0]}]}/>
</TouchableOpacity>
<TouchableOpacity style={styles.bottomButton} onPress ={() => this.tabColor(3)}>
<Icon name='bell' size={25} style={[styles.Icon, {color: this.state.choice === 3 ? COLOR[1] : COLOR[0]}]}/>
</TouchableOpacity>
<TouchableOpacity style={styles.bottomButton} onPress ={() => this.tabColor(4)}>
<Icon name='cog' size={25} style={[styles.Icon, {color: this.state.choice === 4 ? COLOR[1] : COLOR[0]}]}/>
</TouchableOpacity>
</View>
</View>
)
}
tabColor (num) {
var navigator = this.props.navigator
if (num === 1) {
this.setState({choice: 1, screen: <MainScreen navigator={navigator} />})
}
if (num === 2) {
this.setState({choice: 2, screen: <RecommendScreen navigator={navigator} />})
}
if (num === 3) {
this.setState({choice: 3, screen: <LoginScreen navigator={navigator} />})
}
if (num === 4) {
this.setState({choice: 4, screen: <SettingScreen navigator={navigator} />})
}
}
} var styles = StyleSheet.create({
container: {
marginTop: (Platform.OS === 'ios') ? 20 : 0,
flex: 1,
flexDirection: 'column',
backgroundColor: 'black'
},
viewShow: {
flex: 1
},
content: {
flex: 8
},
bottom: {
height: 50,
backgroundColor: 'black',
flexDirection: 'row'
},
buttonImage: {
height: 30,
width: 50
},
bottomButton: {
flex: 1,
alignItems: 'center',
justifyContent: 'center'
},
Icon: {
color: 'white'
}
}) module.exports = MainRoute

上面的代码如果不懂也没有关系,我会一点点解释。

一:Icon

代码:import Icon from 'react-native-vector-icons/FontAwesome'

这是我引用的一个字体图标库,网址:https://github.com/oblador/react-native-vector-icons,Android和iOS使用方式里面介绍的很详细

这里我们会有很多Icon可以去选择。进去选一个自己认为合适的。

使用方式:

<Icon name='compass' size={25} />//name就是你选择的Icon的名称

二、界面

import MainScreen from './MainScreen'
import LoginScreen from './UserLRScreen/LoginScreen'
import RecommendScreen from './RecommendScreen'
import SettingScreen from './SettingScreen'

这是点击按钮需要进入的界面,这里我们还没有实现,可以搭建一个最简单的界面用于预览。

三、navigator

这是一个界面跳转组件,这个组件很重要,后面会有详细介绍。

四、TouchableOpacity

使用TouchableOpacity嵌套的组件,当我们用手点击的时候,会有一个点击动画。并且使用onPress实现点击效果:

   tabColor (num) {
var navigator = this.props.navigator
if (num === 1) {
this.setState({choice: 1, screen: <MainScreen navigator={navigator} />})
}
if (num === 2) {
this.setState({choice: 2, screen: <RecommendScreen navigator={navigator} />})
}
if (num === 3) {
this.setState({choice: 3, screen: <LoginScreen navigator={navigator} />})
}
if (num === 4) {
this.setState({choice: 4, screen: <SettingScreen navigator={navigator} />})
}
}

我们根据点击的哪一个按钮跳转到相应的界面。

使用react-native做一个简单的应用-04界面主框架的更多相关文章

  1. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  2. React Native ——实现一个简单的抓取github上的项目数据列表

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; var React ...

  3. 第四十四篇--做一个简单的QQ登录界面

    功能:输入用户名和密码,正确,显示登录成功,为空的话,提示用户名和密码不能为空,还有记住密码功能. MainActivity.java package com.aimee.android.play.q ...

  4. 用react native 做的一个推酷client

    用react native 做的一个推酷client 仅供大家參考.仅仅为抛砖引玉.希望大家能以此来了解react.并编写出很多其它的优质的开源库,为程序猿做出贡献. 用的的组件: Navigator ...

  5. 如何用 React Native 创建一个iOS APP?

    诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...

  6. 如何用 React Native 创建一个iOS APP?(三)

    前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...

  7. 【Bugly干货分享】一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎

    Bugly 技术干货系列内容主要涉及移动开发方向,是由Bugly邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言 好吧,说是“粒子引擎”还是大言不 ...

  8. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  9. 一起用HTML5 canvas做一个简单又骚气的粒子引擎

    前言 好吧,说是"粒子引擎"还是大言不惭而标题党了,离真正的粒子引擎还有点远.废话少说,先看demo 本文将教会你做一个简单的canvas粒子制造器(下称引擎). 世界观 这个简单 ...

随机推荐

  1. Chrome开发者工具详解(3):Timeline面板

    Timeline面板 Timeline面板是整个面板里面最复杂的一个面板,涉及的东西比较多.可以利用这个面板来记录和分析网页运行过程中的所有活动行为信息. 你可以充分利用这个面板来分析你的网页的程序性 ...

  2. Silverlight Application 无法调用js的方法

    今天下午做项目的时候遇到了这个错误 找了很多原因没找出,在蛋疼之际找出了问题, Silverlight调js方法的时候 js方法里面不能出现一点问题,如果有一点问题就会报这个错误.

  3. 跨平台渲染框架尝试 - constant buffer的管理

    1. Preface Constant buffer是我们在编写shader的时候,打交道最多的一种buffer resource了.constant表明了constant buffer中的数据,在一 ...

  4. SeekBar和RatingBar

    今天在看一个音乐播放器的源代码时候用到了SeekBar,就翻出来mars老师的视频复习了一下,然后综合使用了一下. 首先先看下运行效果:   下来我们看看布局文件的设计: main.xml: < ...

  5. PHP APC缓存配置、使用详解

    一.APC缓存简介 APC,全称是Alternative PHP Cache,官方翻译叫”可选PHP缓存”.它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分:系统缓存和用户数据缓 ...

  6. date用法

    日常工作中经常使用date这个命令,几乎所有与日期时间相关的操作都会跟这个命令扯上点关系.简单写几条经常使用到的date命令,仅供大家参考. 首先检查一下date的版本,注意如果你用的不是GNU da ...

  7. MVC再次学习1

    1.0 匿名函数和匿名类: internal delegate int AddDel(int a, int b); //泛型委托 delegate T Demo<T>(int a,int ...

  8. Ubuntu中找到并杀死僵尸进程

    Ubuntu中产生zombie进程让人很懊恼啊.Windows中在任务管理器里直接找到无响应的进程并结束他就行了,但是ubuntu中需要用命令去解决. System information as of ...

  9. js加载优化三

    Javascript性能优化之异步加载和执行 Author:小欧2013-09-17 随着科技的发展,如今的网站和五六年前相比,现在的人们对web的要求越来越高了,用户体验,交互效果,视觉效果等等都有 ...

  10. 图形性能(widgets的渲染性能太低,所以推出了QML,走硬件加速)和网络性能(对UPD性能有实测数据支持)

    作者:JasonWong链接:http://www.zhihu.com/question/37444226/answer/72007923来源:知乎著作权归作者所有,转载请联系作者获得授权. ---- ...