RN筆記-搭建'我的'模塊

'我的'模塊主要由3個組件組合而成:MineHeaderView国裳、MineMiddleView蛔垢、CommonMyCell

頁面效果圖:

我的.png

組合的頁面源碼:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  ScrollView
} from 'react-native';

// 導(dǎo)入外部的組件
var MyCell = require('./XMGCommonMyCell');
var MineMiddleView = require('./XMGMineMiddleView');
var MineHeaderView = require('./XMGMineHeaderView');

var Mine = React.createClass({
  render() {
    return (
      <ScrollView
        style={styles.scrollViewStyle}
        //內(nèi)容相對于滾動視圖邊緣的坐標
        //吸頂?shù)男Ч?        //這兩個屬性目前只支持ios 對安卓沒有效果
        contentInset = {{top:-200}}
        contentOffset = {{y:200}}
        >
          <MineHeaderView />
          <View style={{marginTop:20}}>
            <MyCell
              leftIconName="h_7.png"
              leftTitle="我的訂單"
              rightTitle="查看全部訂單"
            />
            <MineMiddleView />
          </View>
        <View style={{marginTop:20}}>
          <MyCell
            leftIconName="coupon_1.png"
            leftTitle="RN錢包"
            rightTitle="賬戶余額:¥100"
          />
          <MyCell
            leftIconName="h_2.png"
            leftTitle="抵用券"
            rightTitle="10張"
          />
        </View>
        <View style={{marginTop:20}}>
          <MyCell
            leftIconName="h_3.png"
            leftTitle="積分商城"
          />
        </View>
        <View style={{marginTop:20}}>
          <MyCell
            leftIconName="h_5.png"
            leftTitle="今日推薦"
            rightIconName="coupon_1.png"
          />
        </View>
        <View style={{marginTop:20}}>
          <MyCell
            leftIconName="h_10.png"
            leftTitle="我要合作"
            rightTitle="輕松開店枉证,招財進寶"
          />
        </View>
      </ScrollView>
    );
  }
});

var styles = StyleSheet.create({
  scrollViewStyle: {
    backgroundColor:'#e8e8e8'
  }
});

module.exports = Mine;

MineHeaderView組件:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Image,
  TouchableOpacity
} from 'react-native';

var Dimensions = require('Dimensions');
var {width} = Dimensions.get('window');

var HeaderView = React.createClass({
  render() {
    return (
      <View style={styles.container}>
        { /*上部分*/ }
        {this.renderTopView()}
        { /*下部分*/ }
        {this.renderBottomView()}
      </View>
    );
  },

  // 上部分
  renderTopView(){
    return(
      <View style={styles.topViewStyle}>
        <Image source={{uri:'my_avator'}} style={styles.leftIconStyle}/>
        <View style={styles.centerViewStyle}>
          <Text style={{fontSize:18,color:'white',fontWeight:'bold'}}>react-native實戰(zhàn)</Text>
          <Image source={require('./../Source/common_arrow_right.png')} style={{width:8,height:13,marginRight:8}} />
        </View>
      </View>
    )
  },

// 下部分
renderBottomView(){
  return(
    <View style={styles.bottomViewStyle}>
      {this.renderBottomItem()}
    </View>
  );
},
renderBottomItem(){
  // 數(shù)組
  var itemArr = [];
  //數(shù)據(jù)數(shù)組
  var data = [{'number':'100', 'titile':'碼哥券'},{'number':'12', 'titile':'評價'},{'number':'50', 'titile':'收藏'},];
  //遍歷創(chuàng)建組件裝入數(shù)組
  for (var i = 0; i < data.length; i++) {
    //取出單獨的數(shù)據(jù)
    var item = data[i];
    itemArr.push(
      <TouchableOpacity key={i}>
        <View style={styles.bottomInnerViewStyle}>
          <Text style={{color:'white',fontSize:16}}>{item.number}</Text>
          <Text style={{color:'white',fontSize:15,marginTop:5}}>{item.titile}</Text>
        </View>
      </TouchableOpacity>
    );
  }
  //返回數(shù)組
  return itemArr;
}

});

var styles = StyleSheet.create({
  container: {
    height:400,
    backgroundColor: '#1fb5ec',
  },
  leftIconStyle: {
    width: 60,
    height: 60,
    borderRadius: 30,
    borderWidth: 3,
    borderColor: 'rgba(0,0,0,0.2)',
  },
  centerViewStyle: {
    flexDirection:'row',
    width:width * 0.72,
  },
  topViewStyle: {
    flexDirection: 'row',
    marginTop: 250,
    //設(shè)置側(cè)軸的對其方式
    alignItems: 'center',
    //設(shè)置主軸的對其方式
    justifyContent: 'space-around'
  },
  bottomViewStyle: {
    flexDirection:'row',
    //絕對定位
    position:'absolute',
    bottom: 0,
  },
  bottomInnerViewStyle: {
    width:width/3+1,
    height: 50,
    backgroundColor:'rgba(255,255,255,0.5)',
    justifyContent:'center',
    alignItems:'center',
    borderRightWidth:1,
    borderRightColor:'white'
  }
});

module.exports = HeaderView;

MineMiddleView組件:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  Image,
  TouchableOpacity
} from 'react-native';

var MiddleData = require('./MiddleData.json');

var MineMiddleView = React.createClass({
  render() {
    return (
      <View style={styles.container}>
        {this.renderAllItem()}
      </View>
    );
  },

  renderAllItem(){
    // 定義組件數(shù)組
    var itemArr = [];
    // 遍歷
    for (var i = 0; i < MiddleData.length; i++) {
      //取出單獨的數(shù)據(jù)
      var data = MiddleData[i];
      //創(chuàng)建組件裝入數(shù)組
      itemArr.push(
        <InnerView key={i} iconName={data.iconName} title={data.title} />
      );
    }
    // 返回
    return itemArr;
  }

});

var InnerView = React.createClass({
  getDefaultProps(){
    return{
      iconName: '',
      title:''
    }
  },
  render(){
    return(
      <View>
        <Image source={{uri:this.props.iconName}} style={{width:25,height:25,marginLeft:10}} />
        <Text style={{marginTop:8}}>{this.props.title}</Text>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    //設(shè)置主軸方向
    flexDirection:'row',
    alignItems: 'center',
    backgroundColor: 'white',
    height: 80,
    justifyContent: 'space-around'

  }
});

module.exports = MineMiddleView;

CommonMyCell組件:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TouchableOpacity,
  Image
} from 'react-native';

var MyCell = React.createClass({
  getDefaultProps(){
    return{
      leftIconName:'',
      leftTitle:'',
      rightIconName:'',
      rightTitle:''
    }
  },
  render() {
    return (
      <TouchableOpacity activeOpacity={0.5}>
        <View style={styles.container}>
          { /*左邊*/ }
          <View style={styles.leftViewStyle}>
            <Image source={{uri:this.props.leftIconName}} style={styles.leftImageStyle} />
            <Text style={styles.leftTitleStyle}>{this.props.leftTitle}</Text>
          </View>
          { /*右邊*/ }
          <View style={styles.rightViewStyle}>
            {this.rightSubView()}
          </View>
        </View>
      </TouchableOpacity>
    );
  },
  //右邊的內(nèi)容
  rightSubView(){
    return(
      <View style={{flexDirection:'row',alignItems:'center'}}>
        {this.renderRightContent()}
        { /*箭頭*/ }
        <Image  source={require('./../Source/common_arrow_right.png')} style={{width:8,height:13,marginRight:8, marginLeft:5}} />
      </View>
    )
  },
  // 右邊具體返回的值
  renderRightContent(){
    if (this.props.rightIconName.length == 0) { //不返回圖片
      return(
        <Text style={{color:'gray'}}>{this.props.rightTitle}</Text>
      )
    }else {
      return(
        <Image source={{uri:'h_9.png'}} style={{width:24,height:13}} />
      )
    }
  }
});

var styles = StyleSheet.create({
  container: {
    // 主軸方向
    flexDirection:'row',
    //主軸的對其方式
    justifyContent:'space-between',
    //背景顏色
    backgroundColor: 'white',
    //設(shè)置垂直居中
    alignItems: 'center',
    //高度
    height: 43,
    //下邊框
    borderBottomColor:'#e8e8e8',
    borderBottomWidth:0.5
  },
  leftViewStyle: {
    // 主軸方向
    flexDirection:'row',
    //側(cè)軸居中
    alignItems:'center',
    //左外邊距
    marginLeft: 8
  },
  rightViewStyle: {

  },
  leftImageStyle: { // 左邊的圖片
    width:25,
    height:25,
    marginRight:6,
    //設(shè)置圓角
    borderRadius:12
  },
  leftTitleStyle: {
    fontSize:15
  }
});

module.exports = MyCell;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墙杯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贤壁,更是在濱河造成了極大的恐慌蜘矢,老刑警劉巖狂男,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異品腹,居然都是意外死亡岖食,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門舞吭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泡垃,“玉大人,你說我怎么就攤上這事羡鸥∶镅ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵惧浴,是天一觀的道長存和。 經(jīng)常有香客問我,道長赶舆,這世上最難降的妖魔是什么哑姚? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任祭饭,我火速辦了婚禮芜茵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倡蝙。我一直安慰自己九串,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布寺鸥。 她就那樣靜靜地躺著猪钮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胆建。 梳的紋絲不亂的頭發(fā)上烤低,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音笆载,去河邊找鬼扑馁。 笑死涯呻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的腻要。 我是一名探鬼主播复罐,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雄家!你這毒婦竟也來了效诅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趟济,失蹤者是張志新(化名)和其女友劉穎乱投,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顷编,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡篡腌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了勾效。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹悼。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖层宫,靈堂內(nèi)的尸體忽然破棺而出杨伙,到底是詐尸還是另有隱情,我是刑警寧澤萌腿,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布限匣,位于F島的核電站,受9級特大地震影響毁菱,放射性物質(zhì)發(fā)生泄漏米死。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一贮庞、第九天 我趴在偏房一處隱蔽的房頂上張望峦筒。 院中可真熱鬧,春花似錦窗慎、人聲如沸物喷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦失。三九已至,卻和暖如春术吗,著一層夾襖步出監(jiān)牢的瞬間尉辑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工较屿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隧魄,地道東北人实幕。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像堤器,于是被迫代替她去往敵國和親昆庇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫闸溃、插件整吆、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 本文選自《吸引力法則》大寶庫 快過年了表蝙,有一波最大的“換工潮”正在各家公司蠢蠢欲動。等領(lǐng)完年終獎金放完年假乓旗,公司的...
  • 當下屿愚,健身跳舞旅游三劍客汇跨。 佐村回來,下午一點妆距,午睡一小時穷遂,買票后三點去健身。 今天早起了娱据,六點趕報告蚪黑,答應(yīng)郭昨晚...
    石默默閱讀 144評論 0 0
  • 文/伊仙 頭頂上的太陽曬的人快要蒸發(fā)了忌穿,校園里穿著學士服忙著在校園里留下身影的學生,這么熱的天都阻擋不了他們那朝氣...
    子墨扯淡閱讀 346評論 0 1