React Native项目 - ·我的·界面

2017-09-30  本文已影响57人  黄晓坚

在效果图中我们可以看出我的这个功能界面中的cell样式基本上是差不多,主要是在右侧的功能上显示不一样的,所以我们把cell简单的分析为左边显示iocntitleView 右边显示 >title或者ImageView,所以我们将单个的cell封装成一个组件,在相应的模块中调用组件即可。

MeCells.gif
import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    TouchableOpacity,
    Image,
    Platform,
    AlertIOS,
} from 'react-native';

export default class MyCell extends Component {

    static  defaultProps = {

        LeftTitle : '',     // 左侧标题
        LeftImage : '',     // 左侧图片
        RightTitle : '',    // 右侧标题
        RightImage : '',    // 右侧图片
    }

    render() {
        return (
            <TouchableOpacity activeOpacity={0.5} onPress={()=>{alert('被点击了!')}}>
              <View style={styles.cellStyles}>
                    {/*cell左侧内容*/}
                  <View style={styles.LeftViewStyle}>
                      <Image source={{uri:this.props.LeftImage}} style={styles.LeftImageStyle}/>
                      <Text style={styles.LeftTitleStyle}>{this.props.LeftTitle}</Text>
                  </View>
                     {/*cell右侧内容*/}
                  <View style={styles.RightViewStyle}>
                      {this.RightSubView()}
                  </View>

              </View>
            </TouchableOpacity>
        );
    }

    // cell右侧子视图
    RightSubView(){
        return(
            <View style={styles.RightViewStyle}>
                {this.renderRightImageOrTitle()}
                <Image source={{uri:'icon_cell_rightArrow'}} style={styles.RightArrowStyle}/>
            </View>
        )
    }
     // 右侧显示图片或者标题
    renderRightImageOrTitle() {
        if(this.props.RightImage.length == 0) { // 不显示图片
            return(
                <Text style={styles.RightTitleStyle}>{this.props.RightTitle}</Text>
            )
        } else {
            return(
                <Image source={{uri:this.props.RightImage}} style={styles.RightImageStyle}/>
            )
        }
    }
}

const styles = StyleSheet.create({
    cellStyles: {
        height:Platform.OS == 'ios' ? 40 :30,
        flexDirection:'row',
        alignItems:'center',
        justifyContent:'space-between',
        backgroundColor:'white',

        //下边框
        borderBottomColor:'#E8E8E8',
        borderBottomWidth:0.5,
    },

    LeftViewStyle: {
        flexDirection:'row',
        alignItems:'center',
    },

    RightViewStyle: {
        flexDirection:'row',
        alignItems:'center',
    },

    LeftTitleStyle: {
        color:'gray',
        marginLeft:6,
        fontSize:16,
    },
    LeftImageStyle: {
        width:24,
        height:24,
        marginLeft:6,
        // 圆角
        borderRadius:12
    },
    // 右侧箭头'>' 样式
    RightArrowStyle: {
        width:8,
        height:16,
        marginRight:8,
    },
    RightTitleStyle: {
        color:'gray',
        marginRight:8,
        fontSize:16,
    },
    // 右侧图片样式
    RightImageStyle: {
       width:24,
       height:13,
       marginRight:6,

       // 圆角
       borderRadius:5,

    },
});

module.exports = MyCell;

/ 导入Mycell组件
var MyCell = require('./MyCell');

export default class HJMe extends Component {
    render() {
        return (
           <ScrollView style={{backgroundColor:'#e8e8e8'}}>
               <View style={{marginTop:10}}>
                   <MyCell
                       LeftImage="collect"
                       LeftTitle="我的订单"
                       RightTitle="查看全部订单"
                   />
               </View>

              

               <View style={{marginTop:10}}>
                   <MyCell
                       LeftImage="draft"
                       LeftTitle="钱包"
                       RightTitle="账户余额:¥100.88"
                   />
                   <MyCell
                       LeftImage="like"
                       LeftTitle="抵用券"
                       RightTitle="10张"
                   />

               </View>

               <View style={{marginTop:10}}>
                   <MyCell
                       LeftImage="card"
                       LeftTitle="积分商城"
                   />
               </View>
               <View style={{marginTop:10}}>
                   <MyCell
                       LeftImage="new_friend"
                       LeftTitle="今日推荐"
                       RightImage="me_new"
                   />
               </View>
               <View style={{marginTop:10}}>
                   <MyCell
                       LeftImage="pay"
                       LeftTitle="我要合作"
                       RightTitle="轻松开店,招财进宝"
                   />
               </View>
           </ScrollView>
        );
    }
}

const styles = StyleSheet.create({


});

module.exports = HJMe;

MeMiddleView.gif
// 创建里面组件的类
class InnerView extends React.Component {

    static defaultProps = {

        iconName:'',
        title:'',

        }

    render() {
        return(
            <TouchableOpacity activeOpacity={0.5} onPress={()=>{alert(this.props.title)}}>
                <View style={styles.innerViewStyle}>
                    <Image source={{uri:this.props.iconName}} style={styles.ImageStyles}/>
                    <Text style={{color:'gray'}}>{this.props.title}</Text>
                </View>
            </TouchableOpacity>
        )
    }
}
[
  {"iconName":"order1","title":"待付款"},
  {"iconName":"order2","title":"待使用"},
  {"iconName":"order3","title":"待评价"},
  {"iconName":"order4","title":"退款/售后"}
]
export default class MiddleView extends Component {
    render() {
        return (
            <View style={styles.container}>
                {this.allItems()}
            </View>
        );
    }

    // 所有的items
    allItems() {

        var ItemArr = [];
        //遍历
        for(var i = 0; i < MiddleData.length; i++) {
            // 取出单个对象
            var Itemdata = MiddleData[i];
            ItemArr.push(
                <InnerView key={i} iconName={Itemdata.iconName} title={Itemdata.title} />
            )
        }
        // 返回数组
    return ItemArr;
    }
}
import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Image,
    TouchableOpacity,
    AlertIOS,
} from 'react-native';
// 导入数据
var MiddleData = require('./MiddleData.json');

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

export default class MiddleView extends Component {
    render() {
        return (
            <View style={styles.container}>
                {this.allItems()}
            </View>
        );
    }

    // 所有的items
    allItems() {

        var ItemArr = [];
        //遍历
        for(var i = 0; i < MiddleData.length; i++) {
            // 取出单个对象
            var Itemdata = MiddleData[i];
            ItemArr.push(
                <InnerView key={i} iconName={Itemdata.iconName} title={Itemdata.title} />
            )
        }
        // 返回数组
    return ItemArr;
    }
}

// 创建里面组件的类
class InnerView extends React.Component {

    static defaultProps = {

        iconName:'',
        title:'',

        }

    render() {
        return(
            <TouchableOpacity activeOpacity={0.5} onPress={()=>{alert(this.props.title)}}>
                <View style={styles.innerViewStyle}>
                    <Image source={{uri:this.props.iconName}} style={styles.ImageStyles}/>
                    <Text style={{color:'gray'}}>{this.props.title}</Text>
                </View>
            </TouchableOpacity>
        )
    }
}

const styles = StyleSheet.create({
    container: {
        flexDirection:'row',
        backgroundColor:'white',
        alignItems:'center',
        justifyContent:'space-around',
    },

    innerViewStyle: {
        width:width/4,
        height:70,
        marginBottom:3,

        alignItems:'center',
        justifyContent:'center',
    },

    ImageStyles: {
        width:40,
        height:30,
        marginBottom:3,
    },
});

module.exports = MiddleView;

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

var Dimensions = require('Dimensions');
var {Screenwidth} = Dimensions.get('window');
export default class MeHeaderView extends Component {
    render() {
        return (
            <View style={styles.container}>
                {this.renderTopView()}
            </View>
        );
    }
    // 头像 昵称 界面
    renderTopView(){
        return(

            <View style={styles.topViewStyle}>
                <TouchableOpacity  activeOpacity={1.0} onPress={()=>{alert('跳转到修改个人资料!')}}>
                <View style={styles.RightViewStyle}>
                    <Image source={{uri:'new_friend'}} style={styles.leftIconStyle} />
                    <Text style={{fontSize:18,color:'white',fontWeight:'bold'}}>XX电商</Text>
                    <Image source={{uri:'avatar_vip'}} style={{width:17,height:17}} />
                 </View>
                 </TouchableOpacity>
                <View>
                    <Image source={{uri:'icon_cell_rightArrow'}} style={{width:8,height:13,marginRight:8}} />
                </View>

            </View>


        )
    }

    renderBottomView(){

    }
}

const styles = StyleSheet.create({
    container: {
        height:120,
        backgroundColor:'rgb(255,96,0)'
    },

    topViewStyle:{
        flexDirection:'row',
        marginTop:40,
        alignItems:'center',
        justifyContent:'space-between'
    },
    leftIconStyle:{
        width:70,
        height:70,
        borderRadius:35,
        borderWidth:3,
        borderColor:'rgba(0,0,0,0.2)',
        marginLeft:20,
        marginRight:20,
    },
    RightViewStyle: {
        flexDirection:'row',
        alignItems:'center',
    },
    conterViewStyle:{
        flexDirection:'row',
       width:Screenwidth*0.6,
    },
});

module.exports = MeHeaderView;

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


var Dimensions = require('Dimensions');
var screenW = Dimensions.get('window').width;
export default class MeHeaderView extends Component {
    render() {
        return (
            <View style={styles.container}>
                {this.renderTopView()}
                {this.renderBottomView()}
            </View>
        );
    }
    // 头像 昵称 界面
    renderTopView(){
        return(

            <View style={styles.topViewStyle}>
                <TouchableOpacity  activeOpacity={1.0} onPress={()=>{alert('跳转到修改个人资料!')}}>
                <View style={styles.RightViewStyle}>
                    <Image source={{uri:'new_friend'}} style={styles.leftIconStyle} />
                    <Text style={{fontSize:18,color:'white',fontWeight:'bold'}}>XX电商</Text>
                    <Image source={{uri:'avatar_vip'}} style={{width:17,height:17}} />
                 </View>
                 </TouchableOpacity>
                <View>
                    <Image source={{uri:'icon_cell_rightArrow'}} style={{width:8,height:13,marginRight:8}} />
                </View>

            </View>


        )
    }

    renderBottomView(){
        return(
           <View style={styles.BottomViewStyle}>
                {this.BottomItems()}
            </View>
        )

    }

    BottomItems() {
        var ItemArr = [];
        // 数据
        var ItemData = [{'number':'50',
                         'title' :'购物券'
                        },

                        {'number':'100',
                         'title' :'评价'
                        },

                        {'number':'28',
                         'title' :'收藏'
                        }];
        // 遍历
        for(var i = 0;i < ItemData.length;i++){
            // 取出每一条数组
            var OneItemData = ItemData[i];

            ItemArr.push(
                <TouchableOpacity key = {i} activeOpacity={0.5} onPress={()=>{alert('跳到'+OneItemData.title+'界面')}}>
                  <View style={styles.BottomInnerViewStyle}>
                      <Text style={{color:'white'}}>{OneItemData.title}</Text>
                      <Text style={{color:'white'}}>{OneItemData.number}</Text>

                  </View>
                </TouchableOpacity>
            )

        }
        return ItemArr;
    }
}

const styles = StyleSheet.create({
    container: {
        height:160,
        backgroundColor:'rgb(255,96,0)'
    },

    topViewStyle:{
        flexDirection:'row',
        marginTop:40,
        alignItems:'center',
        justifyContent:'space-between'
    },
    leftIconStyle:{
        width:70,
        height:70,
        borderRadius:35,
        borderWidth:3,
        borderColor:'rgba(0,0,0,0.2)',
        marginLeft:20,
        marginRight:20,
    },
    RightViewStyle: {
        flexDirection:'row',
        alignItems:'center',
    },

    BottomViewStyle: {
        flexDirection:'row',
        // 绝对定位
        position:'absolute',
        bottom:0,

    },

    BottomInnerViewStyle: {
        width:(screenW/3)+1,
        height:40,
        backgroundColor:'rgba(255,255,255,0.4)',

        justifyContent:'center',
        alignItems:'center',

        borderRightWidth:1,
        borderRightColor:'white'

    },
});

module.exports = MeHeaderView;

上一篇 下一篇

猜你喜欢

热点阅读