Flexbox佈局的重要屬性 – iPhone手機開發 iPhone軟體開發教學課程

這裡寫圖片描述

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

class FlexBoxDemo extends Component {
  render() {
    return (
      
        第一個
        第二個
        第三個
        第四個
      
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: '#F5FCFF'
  }
});

AppRegistry.registerComponent('FlexBoxDemo', () => FlexBoxDemo);

1.改變主軸的方向

// 改變主軸的方向
flexDirection:'row'

這裡寫圖片描述
從上圖我們可以看出,Text組件默認寬度和高度剛好包裹文字

2.接下來我們改變主軸的對齊方式(這裡主軸就是X方向)

justifyContent:'flex-end' //右對齊

這裡寫圖片描述

// 設置主軸對齊方式
justifyContent:'center' //居中對齊

這裡寫圖片描述

justifyContent:'space-between'

這裡寫圖片描述

justifyContent:'space-around'

這裡寫圖片描述

3.alignItems定義項目在交叉軸上如何對齊,可以把其想像成側軸(垂直於主軸)的“對齊方式”

要進行這個實驗,我們需要先給幾個Text組件設置高度

第一個
第二個
第三個
第四個

這裡寫圖片描述
那麼接下來我們設置alignItems看看

// 設置側軸的對齊方式
alignItems:'flex-end'

這裡寫圖片描述
4個flexItem底部對齊瞭。

alignItems:'center'

這裡寫圖片描述
相對於父容器居中對齊瞭

另外還有:
baseline ,項目的第一行文字的基線對齊。
stretch(默認值),如果項目未設置高度或設為auto,將占滿整個容器的高度。
就不一一贅述瞭。

4.flexWrap換行
這裡寫圖片描述
第四個寬度超出瞭,第一行不夠顯示,我們來看一下代碼:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

class FlexBoxDemo extends Component {
  render() {
    return (
      
        第一個
        第二個
        第三個
        第四個
      
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: '#F5FCFF',
    // 上邊距
    marginTop:20,
    // 改變主軸的方向
    flexDirection:'row',
    // 設置主軸對齊方式
    justifyContent:'flex-start',
    // 設置側軸的對齊方式
    alignItems:'center',
    // 一行顯示不下,換一行
    flexWrap:'wrap'
  }
});

AppRegistry.registerComponent('FlexBoxDemo', () => FlexBoxDemo);

元素屬性
我們前面學的幾個都是容器屬性,下面我們來看看元素屬性。

1.flex
這裡寫圖片描述

第一個
第二個
第三個
第四個

分析:第一個設置瞭flex:1,最後的效果是第二三四個按照自己文字內容的寬度,剩下的寬度全部給瞭第一個。

那麼我們給第一個,第二個都設置flex:1會怎麼樣呢?
這裡寫圖片描述
第三四個根據自己的文字內容計算寬度後,剩下的屏幕寬度被第一個和第二個平分瞭。

我們修改成這樣看看最後是什麼效果:

第一個
第二個
第三個
第四個

這裡寫圖片描述
結果是不是和你想的一樣?從代碼我們也可以看出:寬度被分成瞭6份,第二和第三是另外的2倍。

2.alignSelf
align-self屬性允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於stretch。

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

class FlexBoxDemo extends Component {
  render() {
    return (
      
        第一個
        第二個
        第三個
        第四個
      
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: '#F5FCFF',
    // 上邊距
    marginTop:20,
    // 改變主軸的方向
    flexDirection:'row',
    // 設置主軸對齊方式
    justifyContent:'flex-start',
    // 設置側軸的對齊方式
    alignItems:'center',
    // 一行顯示不下,換一行
    flexWrap:'wrap'
  }
});

AppRegistry.registerComponent('FlexBoxDemo', () => FlexBoxDemo);

這裡寫圖片描述
從上圖我們可以看出:第一個Text遵守瞭它自己的alignSelf:'flex-end' 地對齊瞭,其他3個都是居中對齊。
alignSelf屬性的值有如下幾個:auto | flex-start | flex-end | center | baseline | stretch

四、獲取當前屏幕的寬度、高度、分辨率

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

// 引入系統的Dimensions類庫
var Dimensions = require('Dimensions');

class FlexBoxDemo extends Component {
  render() {
    return (
      
        當前屏幕的width是:{Dimensions.get('window').width}
        當前屏幕的height是:{Dimensions.get('window').height}
        當前屏幕的scale是:{Dimensions.get('window').scale}
      
    );
  }
}

const styles = StyleSheet.create({
  container: {
    backgroundColor: '#F5FCFF',
    // 上邊距
    marginTop:20,
    // 設置主軸對齊方式
    justifyContent:'center',
    // 設置側軸的對齊方式
    alignItems:'center'
  }
});

AppRegistry.registerComponent('FlexBoxDemo', () => FlexBoxDemo);

這裡寫圖片描述
註意需要引入Dimensions類庫

var Dimensions = require('Dimensions');

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *