React Native入门——布局实践:开发京东客户端首页(一
有了一些对React Native开发的简单了解,让我们从实战出发,一起来构建一个简单的京东客户端。
这个客户端是仿照之前版本的京东客户端开发的Android版应用,来源于CSDN上的一位分享者,再次向他表示感谢!
本文会对京东客户端首页的布局进行简单的分析,并对搜索框部分的开发进行介绍,其他内容在后面的文章中继续介绍。
后继文章:
React Native入门——布局实践:开发京东客户端首页(二)TabBar的构建
欢迎交流!
1.京东客户端首页布局分析
如图所示,京东客户端首页布局基本分为以下几个部分:
(1)头部:搜索栏,由京东logo、搜索输入框和扫描按钮组成
(2)内容部分:父级元素为ListView或ScrollView,可滑动,其中包括一个轮播图、一组功能按钮和秒杀、拍卖商品列表
(3)底部:TabBar,用于切换页面
2.创建工程和相关文件、目录
3.调研相关控件
4.分析搜索栏的基本布局
5.代码实现
- ’use strict’;
- import React, {
- Component
- Image,
- TextInput
- View,
- StyleSheet
- } from ’react-native’;
'use strict';import React, {ComponentImage,TextInputView,StyleSheet
} from 'react-native';
接着声明类和样式,之所以使用export,是因为要在其他类中使用(如:MainScreen)
- export default class Header extends Component {
- }
- const styles = StyleSheet.create({
- });
export default class Header extends Component {}const styles = StyleSheet.create({});
然后在Header类的render()方法中编写JSX代码,在StyleSheet.create()方法中,编写类CSS的样式,如下:
- export default class Header extends Component {
- render() {
- return (
- <View style={styles.container}>
- </View>
- )
- }
- }
- const styles = StyleSheet.create({
- container: {
- flexDirection: ’row’,
- paddingLeft: 10,
- paddingRight: 10,
- paddingTop: Platform.OS === ’ios’ ? 20 : 0, // 处理iOS状态栏
- height: Platform.OS === ’ios’ ? 68 : 48, // 处理iOS状态栏
- backgroundColor: ’#d74047’,
- alignItems: ’center’
- }});
export default class Header extends Component {render() {return (<View style={styles.container}></View>)}
}const styles = StyleSheet.create({container: {flexDirection: 'row',paddingLeft: 10,paddingRight: 10,paddingTop: Platform.OS === 'ios' ? 20 : 0, // 处理iOS状态栏height: Platform.OS === 'ios' ? 68 : 48, // 处理iOS状态栏backgroundColor: '#d74047',alignItems: 'center'}});
然后我们在模拟器或者真机上跑一下,看看效果
根据我们之前的分析,完成样式表的设计,如下:
- const styles = StyleSheet.create({
- container: {
- flexDirection: ’row’, // 水平排布
- paddingLeft: 10,
- paddingRight: 10,
- paddingTop: Platform.OS === ’ios’ ? 20 : 0, // 处理iOS状态栏
- height: Platform.OS === ’ios’ ? 68 : 48, // 处理iOS状态栏
- backgroundColor: ’#d74047’,
- alignItems: ’center’ // 使元素垂直居中排布, 当flexDirection为column时, 为水平居中
- },
- logo: {
- height: 24,
- width: 64,
- resizeMode: ’stretch’ // 设置拉伸模式
- },
- searchBox: {
- height: 30,
- flexDirection: ’row’,
- flex: 1, // 类似于android中的layout_weight,设置为1即自动拉伸填充
- borderRadius: 5, // 设置圆角边
- backgroundColor: ’white’,
- alignItems: ’center’,
- marginLeft: 8,
- marginRight: 12
- },
- scanIcon: {
- height: 26.7,
- width: 26.7,
- resizeMode: ’stretch’
- },
- searchIcon: {
- marginLeft: 6,
- marginRight: 6,
- width: 16.7,
- height: 16.7,
- resizeMode: ’stretch’
- },
- voiceIcon: {
- marginLeft: 5,
- marginRight: 8,
- width: 15,
- height: 20,
- resizeMode: ’stretch’
- },
- inputText: {
- flex: 1,
- backgroundColor: ’transparent’,
- fontSize: 14
- }
- });
const styles = StyleSheet.create({container: {flexDirection: 'row', // 水平排布paddingLeft: 10,paddingRight: 10,paddingTop: Platform.OS === 'ios' ? 20 : 0, // 处理iOS状态栏height: Platform.OS === 'ios' ? 68 : 48, // 处理iOS状态栏backgroundColor: '#d74047',alignItems: 'center' // 使元素垂直居中排布, 当flexDirection为column时, 为水平居中},logo: {height: 24,width: 64,resizeMode: 'stretch' // 设置拉伸模式},searchBox: {height: 30,flexDirection: 'row',flex: 1, // 类似于android中的layout_weight,设置为1即自动拉伸填充borderRadius: 5, // 设置圆角边backgroundColor: 'white',alignItems: 'center',marginLeft: 8,marginRight: 12},scanIcon: {height: 26.7,width: 26.7,resizeMode: 'stretch'},searchIcon: {marginLeft: 6,marginRight: 6,width: 16.7,height: 16.7,resizeMode: 'stretch'},voiceIcon: {marginLeft: 5,marginRight: 8,width: 15,height: 20,resizeMode: 'stretch'},inputText: {flex: 1,backgroundColor: 'transparent',fontSize: 14}
});
请认真注意上面代码中的注释,标有注释的地方,即为和普通iOS、Android开发不太一样的地方!
由于我们已经将父级元素的排布方向改为水平,所以我们只需将需要展现的元素放入<View>的子元素即可,如下代码所示:
- export default class Header extends Component {
- render() {
- return (
- <View style={styles.container}>
- <Image source={require(’./images/header/header_logo.png’)} style={styles.logo}/>
- <View style={styles.searchBox}>
- <Image source={require(’./images/header/icon_search.png’)} style={styles.searchIcon}/>
- <TextInput
- keyboardType=’web-search’
- placeholder=’搜索京东商品/店铺’
- style={styles.inputText}/>
- <Image source={require(’./images/header/icon_voice.png’)} style={styles.voiceIcon}/>
- </View>
- <Image source={require(’./images/header/icon_qr.png’)} style={styles.scanIcon}/>
- </View>
- )
- }
- }
export default class Header extends Component {render() {return (<View style={styles.container}><Image source={require('./images/header/header_logo.png')} style={styles.logo}/><View style={styles.searchBox}><Image source={require('./images/header/icon_search.png')} style={styles.searchIcon}/><TextInputkeyboardType='web-search'placeholder='搜索京东商品/店铺'style={styles.inputText}/><Image source={require('./images/header/icon_voice.png')} style={styles.voiceIcon}/></View><Image source={require('./images/header/icon_qr.png')} style={styles.scanIcon}/></View>)}
}
需要注意的是:
项目源码及资源文件:https://github.com/yuanguozheng/JdApp
本次Commit:https://github.com/yuanguozheng/JdApp/commit/b34add1224fc02d25bd7a188e2cade73c122f59c
转载请注明出处:http://blog.csdn.net/yuanguozhengjust/article/details/50538651
</div></div>
React Native入门——布局实践:开发京东客户端首页(一相关推荐
- React Native for Android 实践 — 实现知乎日报客户端
React Native for Android 的发布,对一个 Android 开发者来说还是有相当的吸引力的.通过前面这篇博客:React Native for Android 入门老虎好不容易入 ...
- React Native 入门实战视频教程(36 个视频)
React Native 入门实战视频教程(36 个视频) #1 React Native 课程介绍「02:14」 #2 搭建 React Native 开发与运行环境跑起来「05:07」 #3 演示 ...
- React Native 入门实战视频教程(37 个视频)
我这里有视频教程,全部是我自己辛苦录的,有兴趣的可以看下. React Native 入门实战视频教程(37 个视频) 从零开始入门学习 React Native 开发,手把手教你写 App 项目 # ...
- React Native 入门实战视频教程(4 个视频)
React Native 入门实战视频教程(4 个视频) #1 React Native 课程介绍「02:14」 #2 搭建 React Native 开发与运行环境跑起来「05:07」 #3 演示在 ...
- 《React Native跨平台移动应用开发》PDF电子书分享
链接: https://pan.baidu.com/s/14r6xZPJ0u1mrZejEuV8RrA 密码: pqan 分享<React Native跨平台移动应用开发>PDF电子书,本 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块...
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- React Native for Arcgis 地图开发 LocationCtrl (十五)
定位工具封装和使用 LocationCtrl import React, {useState, useEffect} from 'react'; import {View, Text, ScrollV ...
- React Native for Arcgis 地图开发 聚合图Cluster (十一)
ClusterLayerCtrl 聚合图层调用封装 import React, {useEffect, useState} from 'react'; import {ScrollView, Styl ...
- 2.React Native Flex布局介绍以及实践
好久没有写博客,一直在用自己的印象笔记记录一些问题.2017年了,想重新的把博客写起来.也希望通过这个平台交一些朋友. 没有具体的介绍基本的语法,主要是说明了与标准的CSS Flex的一些区别以及一个 ...
- React Native入门(十四)之动画(1)Animated详解
前言 在APP的开发中,流畅合理的动画能大大提高用户体验,Android和iOS原生都有对应的动画系统,同样的在RN中也有用于创建动画的API,就是Animated.Animated库使得开发者可以非 ...
最新文章
- 关于域的的一些遐想(一)
- 「原创」马云又嗨啦,云栖音乐节与李健同台飙歌,把健哥都带跑调了
- php lalaogu cn,php安装编译时错误合集
- 卷积神经网络的网络结构——以LeNet-5为例
- SQL2005对字符串进行MD5加密
- 公益性岗位计算机考试内容,公益性岗位公共基础知识:计算机概述-计算机硬件系统(1)...
- vue-:class的几种使用方式
- axure 小程序 lib_【kboneui】打通 H5/微信小程序,多端UI库
- Hello Dojo!(翻译)
- FileZilla Server远程管理
- uartz Spring与Spring Task总结
- SQL Server - 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064)
- Google reCaptcha验证码无法显示解决方案
- 《金牌网管师——助理级网吧网管》目录
- 解决Gradle‘s dependency cache may be corrupt (this sometimes occurs after a network connection timeout
- 使用Windows批处理+ImageMagick 实现批量处理图片
- unigui unidbgrid导出Excel
- UVa1471 Defense Lines(LIS变形)
- android手机慢,揭秘Android手机变慢的三大原因与对策
- ShellShock(破壳漏洞)的简单分析