有了一些對React Native開發的簡單瞭解,讓咱們從實戰出發。一塊兒來構建一個簡單的京東client。javascript
這個client是仿照以前版本號的京東client開發的Android版應用,來源於CSDN上的一位分享者,再次向他表示感謝!html
本文會對京東client首頁的佈局進行簡單的分析,並對搜索框部分的開發進行介紹,其它內容在後面的文章中繼續介紹。java
後繼文章:react
React Native入門——佈局實踐:開發京東client首頁(二)TabBar的構建
android
歡迎交流。ios
如圖所看到的,京東client首頁佈局基本分爲下面幾個部分:git
(1)頭部:搜索欄。由京東logo、搜索輸入框和掃描button組成github
(2)內容部分:父級的元素中爲ListView或ScrollView,可滑動,當中包含一個輪播圖、一組功能button和秒殺、拍賣商品列表web
(3)底部:TabBar,用於切換頁面react-native
'use strict'; import React, { Component Image, TextInput View, StyleSheet } from 'react-native';接着聲明類和樣式,之因此使用export,是因爲要在其它類中使用(如:MainScreen)
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' }});
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開發不太同樣的地方!
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> ) } }需要注意的是: