React Native(一) FlexBox布局
欢迎转载,转载请标明出处:
http://blog.csdn.net/johnny901114/article/details/53241550
本文出自:【余志强的博客】
在React Native中主要使用FlexBox来布局。
安装过React Native的开发环境的就知道,在index.android.js/index.ios.js的文件内容如下:
export default class TemplateDemo extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});
上面的:
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
<Text style={styles.instructions}>
To get started, edit index.ios.js
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</View>
就像Android里面的布局一样,其中style是对view如何显示进行定义。 下面我们来看看flexbox的一些属性。
一、容器属性
1、flexDirection :
容器内的元素的排列方式[主轴方向],可取值row | row-reverse | column | column-reverse
。
column
: 从上至下,纵向排列[默认]. 效果如下图所示:
column-reverse
: 从下至上,纵向排列. 效果如下图所示:
row
: 从左至右,水平排列, 效果如下图所示:
row-reverse
: 从右至左,水平排列,效果如下图所示:
2、justifyContent 属性
justifyContent 属性 指定容器内的元素在主轴线的对齐方式,可取值flex-start | flex-end | center | space-between | space-around
flex-start
(默认值):伸缩项目向一行的起始位置靠齐 ,效果如下图所示:
flex-end
:元素向一行的结束位置靠齐 ,效果如下图所示:
center
:元素向一行的中间位置靠齐 ,效果如下图所示:
space-between
:两端对齐,元素之间的间隔都相等,效果如下图所示:
space-around
:元素会平均地分布在行里,两端保留一半(中间间隔的一半)的空间,效果如下图所示:
3、alignItems属性
alignItems: 侧轴(垂直于主轴)的“对齐方式”。
flex-start:交叉轴的起点对齐。 效果如下所示:
flex-end:交叉轴的终点对齐 。 效果如下所示:
center:交叉轴的中点对齐。 效果如下所示:
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。我们先把第一个View的height属性注释掉,然后把alignItems设置为stretch,效果如下:
4、flexWrap属性
flexWrap: 默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
nowrap(默认值):不换行。 效果如下:
wrap: 换行,第一行在上方。 效果如下:
wrap-reverse:换行,第一行在下方。【react Native不支持此属性值】
二、元素属性
1、flex属性
flex属性是“flex-grow”、“flex-shrink”和“flex-basis”三个属性的缩写,
其中第二个和第三个参数(flex-shrink、flex-basis)是可选参数。
默认值为“0 1 auto”。
宽度 = 弹性宽度 ( flexGrow / sum( flexGrow ) )
如果该元素设置了宽高,那么他的宽度 = 原来的宽度 + 一行中空白的宽度 (flexGrow / sum(flexGrow))
如下如的三个控件,它们的flex属性分别设置为1,2,3。
据此第一个控件占屏幕宽度的1/(1+2+3), 第二个控件占2(1+2+3),第三个占3/(1+2+3). 如下所示:
2、alignSelf属性
alignSelf取值范围:“auto | flex-start | flex-end | center | baseline | stretch”
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的alignItems
属性,如果没有父元素,则等同于stretch
。
注意:react Native不支持此属性值: baseline
现在我们把第二个View设置为alignSelf:’flex-start’,效果如下:
设置为alignSelf:’flex-end’ 效果如下:
设置为alignSelf:’center’ 效果如下:
设置为alignSelf:’stretch’ 且不设置高度,效果如下:
三、几个简单的示例
1,绝对定位和相对定位:
与css定位不同,在React Native中定位不需要再父组件中设置position属性。
通常情况下设置position:’relative’,和不设置position属性,定位的效果是一样的
但是如果父组件设置了内边距,position会做出相应的定位改变,而absolute则不会。
如果View设置了position: ‘absolute’,那么该View或父View设置padding对该View都无效:
2,获取宽高分辨率
var width = require(‘Dimensions’).get(‘window’).width;
var height = require(‘Dimensions’).get(‘window’).height;
var scale = require(‘Dimensions’).get(‘window’).scale;
还有一种更简洁的方式:
var {width,height,scale} = require(‘Dimensions’).get(‘window’);
3,默认宽度问题
View不设置宽度默认占一行
把上面显示屏幕分辨率的View设置一个背景,就会发现View不设置宽度默认是占一行的:
四、本博客所有代码展示:
import React, {Component} from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
//330 375 = 45 15+30
var {width, height,scale} = require('Dimensions').get('window');
export default class FlexBoxDemo extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.text_style1}>{width}</Text>
<Text style={styles.text_style2}/>
<Text style={styles.text_style3}/>
<Text style={styles.text_style4}/>
<Text style={styles.text_style5}/>
<Text style={styles.text_style6}/>
</View>
);
}
}
class PositionDemo extends Component {
render() {
return (
<View style={{backgroundColor: '#F5FCFF', height: 200, paddingTop: 30,paddingBottom:100,flexDirection:'column'}}>
<Text style={styles.positionStyle}/>
<Text style={{backgroundColor:'gray'}}>width x height={width} x {height}; scale:{scale}</Text>
{/*默认占一行
<Text style={{backgroundColor:'blue'}}/>*/}
</View>
);
}
}
const styles = StyleSheet.create({
container: {
//flex: 1,
backgroundColor: '#F5FCFF',
flexDirection: 'row',
marginTop: 30,
height: 200,
justifyContent: 'flex-start',
alignItems: 'stretch',
flexWrap: 'wrap',
},
text_style1: {
width: 40,
height: 50,
backgroundColor: '#9900ff',
//flex: 1,
//textAlign: 'center',//文字仅仅水平居中
},
text_style2: {
width: 40,
height: 60,
backgroundColor: '#99ee00',
//flex: 2,
// alignSelf: 'stretch'
},
text_style3: {
width: 80,
height: 30,
backgroundColor: '#ff9900',
//flex: 3,
},
text_style4: {
width: 50,
height: 70,
backgroundColor: '#99ff00',
//flex: 3,
},
text_style5: {
width: 90,
height: 70,
backgroundColor: '#99ee00',
//flex: 3,
},
text_style6: {
width: 80,
height: 70,
backgroundColor: '#ff9900',
},
positionStyle: {
//flex:1,
height: 50,
width: 100,
backgroundColor: 'black',
position: 'absolute',//absolute
bottom: 20,
left: 120,
//paddingBottom: 40, //如果position:'absolute',则paddingBottom:40无效
//通常情况下设置position和absolute,定位的效果是一样的,
//但是如果父组件设置了内边距,position会做出相应的定位改变,而absolute则不会。
}
});
AppRegistry.registerComponent('FlexBoxDemo', () => PositionDemo);
React Native(一) FlexBox布局的更多相关文章
- React Native之FlexBox布局
参考原文链接:https://www.cnblogs.com/wujy/p/5841685.html 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局” ...
- React Native,flexbox布局
Flexbox布局 flex:使组件在可利用的空间内动态地扩张或收缩.flex:1会使组件撑满空间.当有多个组件都指定了flex的值,那么谁的flex值大谁占得空间就大,占得大小的比例就是flex值的 ...
- React Native之FlexBox介绍和使用
# 前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会 ...
- React Native知识1-FlexBox 布局内容
一:理论知识点 1:什么是FlexBox布局? 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其 ...
- react native 之页面布局
第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...
- 从零学React Native之06flexbox布局
前面我们接触了好多React Native代码, 并没有介绍RN中的组件具体是如何布局的,这一篇文章,重点介绍下flexbox布局. 什么是flexbox布局 React中引入了flexbox概念,f ...
- React Native 系列(四) -- 布局
前言 本系列是基于React Native版本号0.44.3写的.RN支持CSS中的布局属性,因此可以使用CSS布局属性,这里就不详细地讲解了,这篇文章的重点主要是讲述一下RN中的Flex布局. CS ...
- React Native填坑之旅--布局篇
代码在这里: https://github.com/future-challenger/petshop/tree/master/client/petshop/src/controller 回头看看RN ...
- React Native布局
一款好的APP离不了一个漂亮的布局,本文章将向大家分享React Native中的布局方式FlexBox. 在React Native中布局采用的是FleBox(弹性框)进行布局. FlexBox提供 ...
- React-Native(四):React Native之View学习
React Native实现以下布局效果:携html5(http://m.ctrip.com/html5/) 基于HelloWord修改项目代码: /** * Sample React Native ...
随机推荐
- chm 转 txt
CHM格式转TXT,如果在Windows下可使用命令行实现,为叙述方便,以笔者机器为例,在 E:\11 文件夹下有 123.chm 这个文件,按如下操作将这个 CHM 转成 TXT 文件. 第一步: ...
- 几个APP开发的创意
每年都有大量新APP进入市场,争夺消费者的关注.随着越来越多的APP进入主流,随着需求的变化和新技术的出现,一系列新的APP随之而来.那么目前有什么APP开发的好创意呢? 1.旅游指南APP 当你在一 ...
- 微信小程序之Todo
wxAppTodos todomvc提供了在当今大多数流行的JavaScript MV*框架概念实现的相同的Todo应用程序,觉得这个小项目挺有意思,最近在学习微信小程序,故用小程序做一版Todo ...
- 阿里云在RSAC 2018上宣布 将在西雅图建立安全实验室
日前,2018年度的RSA Conference全球信息安全大会在美国加州旧金山市召开.作为全球三大云计算服务商之一,阿里云携3款全新安全产品亮相,并宣布今年将在西雅图设立全新的安全实验室,整合全球安 ...
- [ZJOI 2010]base 基站选址
Description 题库链接 给出 \(n\) 个村庄的横坐标 \(D_i\) .要求在这 \(n\) 个村庄内最多选择 \(m\) 个作为通讯基站,在村庄 \(i\) 建造通讯基站的代价为 \( ...
- [AHOI2005]洗牌
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- [USACO13DEC]假期计划(黄金)Vacation Planning (gold)
题目翻译不好,这里给出一份 题目背景 Awson是某国际学校信竞组的一只大佬.由于他太大佬了,于是干脆放弃了考前最后的集训,开车(他可是老司机)去度假.离开学校前,他打开地图,打算做些规划. 题目描述 ...
- C++Primer学习——const
Const int size = 512; 在编译的时候,编译器会把用到该变量的地方全部替换成对应的值. const&可以绑定字面值,所以当用常量引用绑定一个常量时,是否可以看成那个值在编译阶 ...
- hdu 5893 (树链剖分+合并)
List wants to travel Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/O ...
- 【USACO Feb 2014】Cow Decathlon
题目描述 约翰有 N 头奶牛,组成了一直队伍参加全能比赛.比赛一共有 N 项,每头奶牛必须参加一项比 赛,每项比赛也必须有一头奶牛参加.任何一头奶牛可以胜任任何一项比赛,但得分不一样.如果第 i 头奶 ...