从零开始RNReact NativeReact Native的魔盒

ReactNative之Flex布局(三)

2017-05-05  本文已影响1689人  袁峥

前言

眼看很多公司都开始尝试使用ReactNative,达到跨平台开发,最近也写了很多文章,希望让更多想了解的同学快速上手ReactNative.

如果喜欢我的文章,可以关注我微博:袁峥Seemygo

ReactNative之Flex布局

Flex简介

Flex主轴和侧轴

flexDirection属性

row(默认值):主轴为水平方向,从左向右。依次排列
row-reverse:主轴为水平方向,从右向左依次排列
column:主轴为垂直方向,默认的排列方式,从上向下排列
column-reverse:主轴为垂直方向,从下向上排列
export default class ReactDemo extends Component {
  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row'
    },
    baseTextStyle:{
        backgroundColor:'deepskyblue',
        width:50,
        height:50,
        fontSize:15,
        textAlign:'center',
        margin:20,
    }
});
row.png row-reverse.png column.png column-reverse .png

flexWrap属性

nowrap 组件只排列在一行上,可能导致溢出。
wrap   组件在一行排列不下时,就进行多行排列

  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row',
        flexWrap:'wrap'
    },
    baseTextStyle:{
        backgroundColor:'deepskyblue',
        width:75,
        height:50,
        fontSize:15,
        textAlign:'center',
        margin:20,
    }
});

nowrap.png wrap.png

justifyContent

flex-start: 子组件向主轴起点对齐,如果主轴水平,从左开始,主轴垂直,从上开始。
flex-end 子组件向主轴终点对齐,如果主轴水平,从右开始,主轴垂直,从下开始。
center 居中显示,注意:并不是让某一个子组件居中,而是整体有居中效果
space-between 均匀分配,相邻元素间距离相同。每行第一个组件与行首对齐,每行最后一个组件与行尾对齐。
space-around 均匀分配,相邻元素间距离相同。每行第一个组件到行首的距离和每行最后一个组件到行尾的距离将会是相邻元素之间距离的一半

export default class ReactDemo extends Component {
  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row',
        justifyContent:'space-around'
    },
    baseTextStyle:{
        backgroundColor:'deepskyblue',
        width:50,
        height:50,
        fontSize:15,
        textAlign:'center',
        marginTop:20,
    }
});
flex-start.png flex-end.png center.png space-between .png space-around.png

alignItems

flex-start 子组件向侧轴起点对齐。
flex-end 子组件向侧轴终点对齐。
center 子组件在侧轴居中。
stretch 子组件在侧轴方向被拉伸到与容器相同的高度或宽度。

  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row',
        justifyContent:'space-around',
        alignItems:'stretch'
    },
    baseTextStyle:{
        backgroundColor:'deepskyblue',
        width:50,
        // height:50,
        fontSize:15,
        textAlign:'center',
        marginTop:20,
    }
});
flex-start .png flex-end .png center .png stretch .png

alignSelf

auto 继承它的父容器的alignItems属性。如果没有父容器则为 "stretch"
flex-start 子组件向侧轴起点对齐。
flex-end 子组件向侧轴终点对齐。
center 子组件在侧轴居中。
stretch 子组件在侧轴方向被拉伸到与容器相同的高度或宽度。
export default class ReactDemo extends Component {
  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text4Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row',
        justifyContent:'space-around',
        alignItems:'center'
    },
    baseTextStyle:{
        backgroundColor:'deepskyblue',
        width:50,
        // height:50,
        fontSize:15,
        textAlign:'center',
        marginTop:20,
    },
    text3Style:{
        alignSelf:'flex-start'
    }
});
alignSelf.png

flex

export default class ReactDemo extends Component {
  render() {
    return (
      <View style={styles.rootView}>
          <Text style={[styles.text1Style,styles.baseTextStyle]}>1</Text>
          <Text style={[styles.text2Style,styles.baseTextStyle]}>2</Text>
          <Text style={[styles.text3Style,styles.baseTextStyle]}>3</Text>
          <Text style={[styles.text4Style,styles.baseTextStyle]}>4</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    rootView:{
        backgroundColor:'darkorange',
        flex:1,
        flexDirection:'row',
        justifyContent:'space-around',
        alignItems:'center'
    },
    baseTextStyle:{
        // width:50,
        // height:50,
        fontSize:15,
        textAlign:'center',
        marginTop:20,
    },
    text1Style:{
        flex:1,
        backgroundColor:'red',
    },
    text2Style:{
        flex:1,
        backgroundColor:'deepskyblue',
    },
    text3Style:{
        flex:3,
        backgroundColor:'green'
    },
    text4Style:{
        flex:1,
        backgroundColor:'blue',
    }
});
flex.png
上一篇下一篇

猜你喜欢

热点阅读