React-Native 之控件布局

  Nodejs 一度将前端JS 推到了服务器端,而15年FB的React-Native RN再一次将JS 推到了移动端的开发浪潮中。RN的优势这里不再重复,它是我们这些习惯了服务端、web端开发,而又不想去花太多时间掌握Android、IOS移动端原生开发的人员的福音,可以说是我们通向全栈工程师的快速捷径!于是乎最近开始学习React-Native,并将学习中的一些点滴记录下来。

  网上关于RN的资料不少了,首先是环境配置,不一定非得Mac 下。我是基于Windows开发的,Windows下环境如何配置大家可以参考这篇文章 Windows下RN环境搭配。准备好开发环境之后就是具体的开发知识学习了。首先是RN控件的学习,这里我们先学习RN的控件布局。

  RN的布局采用的是CSS+Flexbox布局方式。我们初始化使用 命令初始化一个名叫reactNative的项目,命令如下:react-native init reactNative。等待完成之后,我们使用WebStorm打开项目,在项目里面的index.android.js文件中插入如下代码:

 1 import React, {Component} from ‘react‘;
 2 import {
 3     AppRegistry,
 4     StyleSheet,
 5     Text,
 6     View
 7 } from ‘react-native‘;
 8
 9 var App = React.createClass({
10     render: function () {
11         return (
12             <View style={styles.main}>
13                 <View style={styles.view1}>
14                     <Text style={styles.text}>Test1</Text>
15                     <Text style={styles.text}>Test2</Text>
16                     <Text style={styles.text}>Test3</Text>
17                 </View>
18                 <View style={styles.view2}>
19                     <Text style={styles.text}>Test4</Text>
20                     <Text style={styles.text}>Test5</Text>
21                     <Text style={styles.text}>Test6</Text>
22                     <Text style={styles.text}>Test7</Text>
23                     <Text style={styles.text}>Test8</Text>
24                     <Text style={styles.text}>Test9</Text>
25                     <Text style={styles.text}>Test10</Text>
26                 </View>
27             </View>
28         );
29     }
30 })
31 var styles = StyleSheet.create({
32     main: {
33         flex: 1, borderColor: ‘blue‘, margin: 5, borderWidth: 1
34     },
35     view1: {
36         borderColor: ‘red‘, borderWidth: 1, flexDirection: ‘column‘, height: 150
37     },
38     view2: {
39         borderColor: ‘red‘, borderWidth: 1, flexDirection: ‘row‘
40     },
41     text: {
42         fontSize: 14, margin: 10
43     }
44 })
45 AppRegistry.registerComponent(‘reactNative‘, ()=>App);

  编辑完代码之后,我们使用windows command 进入项目的目录,然后使用命令:react-native start启动项目,然后启动模拟器,接着使用命令:react-native run-android。就可以在模拟器中看到如下效果!

这里结合代码,我们可以看出:最外层的View我们使用的是样式style.main,采用的flex:1,borderColor:’blue’ 就是我们图片中最外层的蓝色边框视图。flex值大于0是表示控件是可以伸缩的,由于没有其他视图和这里的最外层View视图竞争空间,因此它填充满了我们这个手机屏幕。然后里面有2个子View视图。

第一个视图使用样式style.view1 它的边框是红色,采用的flexDirection:’column’纵向伸缩,因此它里面的三个Text控件都是从上往下依次排列的。

第二个视图使用样式style.view2 它的边框也是红色,采用的flexDirection:’row’横向伸缩,因此它里面的7个Text控件都是从左向右依次排列的。(最后一个Text超出了手机宽度边界,未显示完整。)

由此我们可以看出:在RN中flexbox的flexDirection有两个字column和row默认为column值。当设置为column时控件按照纵向依次排列布局,当设置为row时控件按照横向依次排列布局;

前面我们说了最外层的View设置flex=1是因为没有其他控件和它竞争空间,因此它填充满了我们整个手机屏幕。这里我们修改一下样式表styles向其中添加几个样式,并将它们应用到View1中的3个Text中,修改代码如下:

 1 var App = React.createClass({
 2     render: function () {
 3         return (
 4             <View style={styles.main}>
 5                 <View style={styles.view1}>
 6                     <Text style={[styles.text,styles.row1]}>Test1</Text>
 7                     <Text style={[styles.text,styles.row2]}>Test2</Text>
 8                     <Text style={[styles.text,styles.row3]}>Test3</Text>
 9                 </View>
10                 <View style={styles.view2}>
11                     <Text style={styles.text}>Test4</Text>
12                     <Text style={styles.text}>Test5</Text>
13                     <Text style={styles.text}>Test6</Text>
14                     <Text style={styles.text}>Test7</Text>
15                     <Text style={styles.text}>Test8</Text>
16                     <Text style={styles.text}>Test9</Text>
17                     <Text style={styles.text}>Test10</Text>
18                 </View>
19             </View>
20         );
21     }
22 })
23 var styles = StyleSheet.create({
24     main: {
25         flex: 1, borderColor: ‘blue‘, margin: 5, borderWidth: 1
26     },
27     view1: {
28         borderColor: ‘red‘, borderWidth: 1, flexDirection: ‘column‘, height: 150
29     },
30     view2: {
31         borderColor: ‘red‘, borderWidth: 1, flexDirection: ‘row‘
32     },
33     text: {
34         fontSize: 14, margin: 10
35     },
36     row1: {flex: 3},
37     row2: {flex: 2},
38     row3: {flex: 1}
39 })

   这里我们将View1中的三个Text控件的flext值分别设置为3,2,1,然后我们在手机中看的效果如下图:我们可以看出三个Text控件的高度分别为3:2:1占满了我们的View1的高度,这也证实了我们前面的结论。

  

  然后我们看一下alignSelf布局,alignSelf的对齐方式主要有四种:flex-start、 flex-end、 center、  auto、 stretch。我们添加如下代码:

 1 <View style={styles.view3}>
 2     <View  style={[styles.left,{width:100,height:40, borderWidth:1,borderColor:‘silver‘}]}><Text>left</Text></View>
 3     <View   style={[styles.center,{width:100,height:40,borderWidth:1,borderColor:‘silver‘}]}><Text>center</Text></View>
 4     <View  style={[styles.right,{width:100,height:40,borderWidth:1,borderColor:‘silver‘}]}><Text>right</Text></View>
 5     <View style={[styles.default,{width:100, height:40,borderWidth:1,borderColor:‘silver‘}]}><Text>default</Text></View>
 6 </View>
 7
 8 styles:
 9 view3: {flex: 1, margin: 5, borderColor: ‘red‘, borderWidth: 1},
10 left: {alignSelf: ‘flex-start‘},
11 center: {alignSelf: ‘center‘},
12 right: {alignSelf: ‘flex-end‘},
13 default: {alignSelf: ‘auto‘},
可以看到如下的效果:

  然后还有alignItems、justifyContent它们分别是水平居中、垂直居中。它们的用法如下,我们添加如下代码:
1 <View style={[styles.view3,{alignItems:‘center‘,justifyContent:‘center‘}]}>
2     <View style={{width:120,height:30, borderWidth:1,borderColor:‘silver‘}}>
3         <Text>水平垂直居中</Text>
4     </View>
5 </View>
运行之后可以看到如下效果:

以上就是RN的CSS和flexbox布局的简单学习。
时间: 2024-10-27 09:07:59

React-Native 之控件布局的相关文章

React Native - 2 控件Flexbox

*强烈建议使用Genymotion模拟器,比AVD速度快,功能强大. 1. flexDirection Flexbox是连续布局,它有主轴(primary axis)和交叉轴(cross axis)组成,使用flexDirection属性来确定主轴的方向,它包括水平(row)和垂直(column)两个值,默认是column. 1.1 水平布局 修改自动生成的代码文件,/index.android.js, styles: results: 1.2 垂直布局,修改L41,flexDirection:

Android 控件布局常用属性

<!--单个控件经常用到android:id -- 为控件指定相应的IDandroid:text -- 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串android:grivity -- 指定控件的基本位置,比如说居中,居右等位置android:textSize -- 指定控件当中字体的大小android:background -- 指定该控件所使用的背景色,RGB命名法 android:width -- 指定控件的宽度android:height --

【Android 初学】3、控件布局初步

什么是控件布局 所谓的控件布局方法,就是指控制控件在Activity当中的位置.大小.颜色以及其他控件样式属性的方法. 控件的布局,在android中,有两种方法: 1.使用布局文件完成控件布局(相对简单) 2.在Java代码中完成控件布局(动态布局.更灵活.也相对复杂) 布局方法分类 1.Linear Layout(最容易掌握) 线性布局:可以纵向布局.也可以横向布局. 2.Ralative Layout(最常用使用.熟悉WEB开发的人就很熟悉) 3.ListView 4.Grid View

运用 BoxLayout 进行 Swing 控件布局

http://www.ibm.com/developerworks/cn/java/j-lo-boxlayout/ http://www.cnblogs.com/taoweiji/archive/2012/12/10/2812221.html http://www.2cto.com/kf/201405/297440.html 运用 BoxLayout 进行 Swing 控件布局,布布扣,bubuko.com

Android:控件布局(单帧布局)FrameLayout

FrameLayout:所有控件位于左上角,并且直接覆盖前面的子元素. 实例: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_heig

Android:控件布局(线性布局)

android:orientation指定LinearLayout布局方向,值:vertical (垂直方向) .horizontal(水平方向) 实例一: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=&quo

Qt编程之UI与控件布局

当然,大家都知道UI界面可以用Qt Designer在约束环境下设置编辑.ui文件,再将.ui文件转换成对应的ui_XXX.h文件,这头文件中的内容是:用C++语言实现真正的界面布局.uic -o "outputfile" "inputfile.ui"命令行可以转换 当然,也可以自己用C++来实现界面布局利用成员函数SetGeometry什么的,但是那样的开发效率就下降了,BUG概率引入的也会加大. 这篇文章很好的演示了只利用C++实现的界面设计布局: http:/

android控件布局 ToggleButton按钮 图片和文字

ToggleButton控件具有checked属性对于要切换状态的功能按钮来说十分好用 这里以phone的开启DTMFTwelveKeyDialer的按钮为例 展示其效果和布局 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andro

Silverlight学习笔记(三):控件布局管理

简介: 学习Silverlight控件在页面上是如何进行布局,实现多种复杂布局 一.常见的三种布局方式 1. Silverlight学习笔记(三):控件布局管理,码迷,mamicode.com