首先,我们利用react-native init命令创建一个名为JdApp(当然也可以自己起)的React Native工程(具体操作请参考: http://blog.csdn.net/yuanguozhengjust/article/details/50468050),项目结构如下图所示:

根据我们刚才对京东客户端结构的分析,目前可以先新建几个文件,用于拆分代码,具体方案如下:

images目录:用于存放相关图片

**Header.js:**用于构建头部搜索栏(本文主要介绍此文件中的内容)

MainScreen.js:主屏幕文件,起到最外层控制作用

HomePage.js:首页文件,用于构建轮播图、功能按钮、特价列表等

3.调研相关控件

目前App中需要用到轮播图、Tab这两个高级控件,而React Native原生的控件仅有TabBarIOS可供iOS平台使用,不能满足我们的需求,根据在Github上搜索的结果,我们可以选用以下几个第三方控件进行开发:

react-native-viewpager:可实现轮播图效果,地址: https://github.com/race604/react-native-viewpager

react-native-tab-navigator:可用于构建Tab,并可以轻松地进行页面切换,地址: https://github.com/exponentjs/react-native-tab-navigator

有兴趣的读者,还可以自行构建Tab和Swiper这种控件,做一个符合项目需求的控件并不难,但想要扩展性、通用性更强,不是一件容易的事情。

4.分析搜索栏的基本布局

头部的搜索栏,分为三个部分:logo、输入框、扫码按钮。

其中,logo可以使用Image控件

输入框稍复杂,外层是一个圆角的View,其内部左侧是一个Image,用于展示放大镜Icon,中间为一个TextInput控件用于输入,右侧为一个Image,用于展示语音搜索Icon

右侧扫码按钮也比较简单,仅为一个Image

那么根据FlexBox布局原则,可以按以下方式进行布局:

**这里特别说明一下,**由于React Native不支持自动计算Image等View的大小(参见: http://facebook.github.io/react-native/docs/images.html#why-not-automatically-size-everything),所以我们不能像Android的XML那样,设置为wrap_content,必须为Image指定宽度和高度,而由于React Native使用的是类似Android dp的像素,所以请根据设计图的尺寸自行计算,这里推荐一个网站: https://pixplicity.com/dp-px-converter/

5.代码实现

确定好了搜索栏的布局,那么我们就开始具体使用JavaScript代码进行实现,首先新建一个Header.js的文件,并引入我们需要用到的控件

[javascript] view plain copy

print ?

’use strict’; import React, { Component Image, TextInput View, StyleSheet } from ’react-native’;

‘use strict’;

import React, {

Component

Image,

TextInput

View,

StyleSheet

} from ‘react-native’;

接着声明类和样式,之所以使用export,是因为要在其他类中使用(如:MainScreen)

[javascript] view plain copy

print ?

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的样式,如下:

[javascript] view plain copy

print ?

export default class Header extends Component { render() { return ( ) } } 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 (

)

}

}

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’

}});

然后我们在模拟器或者真机上跑一下,看看效果

嗯,不错,貌似是我们想要的效果!接着把图片资源导入项目中去,很简单,只需要在目录创建文件夹,将图片复制进去,WebStorm等IDE即可自动识别

根据我们之前的分析,完成样式表的设计,如下:

[javascript] view plain copy

print ?

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,

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

总结

**其实上面说了这么多,钱是永远赚不完的,在这个知识付费的时代,知识技能提升才是是根本!我作为一名8年的高级工程师,知识技能已经学习的差不多。**在看这篇文章的可能有刚刚入门,刚刚开始工作,或者大佬级人物。

像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

这么重要的事情说三遍啦!点赞+点赞+点赞!

【Android高级架构师系统学习资料】高级架构师进阶必备——设计思想解读开源框架

第一章、热修复设计 第二章、插件化框架设计 第三章、组件化框架设计 第四章、图片加载框架 第五章、网络访问框架设计 第六章、RXJava 响应式编程框架设计 第七章、IOC 架构设计 第八章、Android 架构组件 Jetpack

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

物。

像刚刚开始学Android开发小白想要快速提升自己,最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

这么重要的事情说三遍啦!点赞+点赞+点赞! [外链图片转存中…(img-G8ICjtth-1712792864345)]

【Android高级架构师系统学习资料】高级架构师进阶必备——设计思想解读开源框架

第一章、热修复设计 第二章、插件化框架设计 第三章、组件化框架设计 第四章、图片加载框架 第五章、网络访问框架设计 第六章、RXJava 响应式编程框架设计 第七章、IOC 架构设计 第八章、Android 架构组件 Jetpack

[外链图片转存中…(img-j4Rfrgv4-1712792864345)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: