深入理解react native布局(一)居中

2023-11-18

刚刚做完了一个项目,基本上把react native各种布局方式都用上了,发现了很多坑,也学会和很多,这里给大家分享一下哈。

首先我们要有个概念:react native里面是兼容大部分我们在css里面用到的布局方式,此外接触过css里面flex布局方式的话,我们会发现react native内的flex布局方式基本上和

css里的flex布局方式类似,所以不要觉得react native 布局不好做,其实他比起css来说要容易,比原生开发更是容易不知道多少倍。战略上藐视他!!!

对题:居中

首先大概说下flex需要知道的地方:

flex布局依赖于flexDirection的,意思就是说:以View为例,如果flex布局方式的话,如果它内部子组件的话他们的排列方向有横向和纵向之分。默认的react native已经设定了flex内部的布局为纵向的。

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red"}}>  
  2.         <View style={{backgroundColor:"green"}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange"}}>  
  6.           <Text>1</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue"}}>  
  9.           <Text>1</Text>  
  10.         </View>  
  11.       </View>  
结果:



那如果是横向的呢:

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"row",height:200}}>  
  2.         <View style={{backgroundColor:"green"}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange"}}>  
  6.           <Text>1</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue"}}>  
  9.           <Text>1</Text>  
  10.         </View>  
  11.       </View>  

结果:


是不是很简单呢,但是需要指出的是:

我们会发现在当flexDirection是“row”时,内部组件排列顺序为横向排列时,子组件的高度会自动撑满父组件。同样的道理如果是“column”时子组件的宽度会自动撑满父组件。记住这一点。

所以,大概有个印象了吧。

下面我们来说说flex上的值,我们在看别人代码的时候经常看到flelx:1,flex:2 之类的东东,这些到底是干嘛的呢?实践一下吧。我们以flexDirection为“column” 为例

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200}}>  
  2.         <View style={{backgroundColor:"green",flex:1}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange"}}>  
  6.           <Text>3</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue"}}>  
  9.           <Text>3</Text>  
  10.         </View>  
  11.       </View>  
结果:

结果很明显啦,flex:1 会把其余组件(没有设置flex)剩余的空间全部占完。

那我们试试下面这些:

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200}}>  
  2.         <View style={{backgroundColor:"green",flex:1}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange",flex:1}}>  
  6.           <Text>3</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue",flex:1}}>  
  9.           <Text>3</Text>  
  10.         </View>  
  11.       </View>  

结果:


所以是不是比起原生来简单多了,仅仅flex:1 偷笑,就均分了。对我们已经发现了一种自动居中的方式了。


react native 实现居中有多种方式:

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200}}>  
  2.         <View style={{backgroundColor:"green",flex:1}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange"}}>  
  6.           <Text>2</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue",flex:1}}>  
  9.           <Text>3</Text>  
  10.         </View>  
  11.       </View>  

结果:


so easy大笑,居中了。


下面我们说说aliginItems justifyContent,这两个属性都是设置在父组件上,用于界定子组件的位置。
aliginItems:官方解释:
aligns children in the cross direction. For example, if children are flowing vertically, alignItems controls how they align horizontally. It works like align-items in CSS。
大白话:
如果父组件flexDirection设置为:"column",则aliginItems指定的是在横向上,子组件的定位方式。同理如果父组件felxDirection设置为“row”,则alignItems指定的是在纵向上子组件的定位方式。
上代码:
 
[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200,alignItems:"center"}}>  
  2.         <View style={{backgroundColor:"green",flex:1}}>  
  3.           <Text>1</Text>  
  4.         </View>  
  5.         <View style={{backgroundColor:"orange"}}>  
  6.           <Text>2</Text>  
  7.         </View>  
  8.         <View style={{backgroundColor:"blue",flex:1}}>  
  9.           <Text>3</Text>  
  10.         </View>  
  11.       </View>  
结果:
 
 
ok,我们貌似已经实现垂直水平居中了。

so,那justifyContent这个属性是做什么的呢?

justifyContent:官方解释:
justifyContent aligns children in the main direction. For example, if children are flowing vertically, justifyContent controls how they align vertically. It works like justify-content in CSS (default: flex-start). See https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content for more details.
大白话:如果flexDirection为“row”,那么justifyContent指定的是子组件在横向上的对齐方式,如果flexDirection为“column”则justifyContent指定的是子组件在纵向上的对齐方式。
上代码:
[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200,justifyContent:"center"}}>  
  2.         <View style={{backgroundColor:"orange"}}>  
  3.           <Text>2</Text>  
  4.         </View>  
  5. </View>  
结果:
ok。


在说说我们的aliginSelf属性

我们经常会遇到这样的情况


 
这在react native里面怎么实现呢?呵呵,这就用到我们说的alignSelf属性了,注意alignSelf是标定在子组件上的,用于指定子组件的对齐方式。如果父组件的flexDirection是“row”,那么alignSelf就是标定子组件在竖直方向上的对齐方式,同理如果父组件的flexDirection标定为“column”,那么alignSelf指定的就是子组件在水平方向

上代码:

[javascript]  view plain  copy
  1. <View style={{backgroundColor:"red",flexDirection:"column",height:200,justifyContent:"center"}}>  
  2.         <View style={{backgroundColor:"orange",flexDirection:"row",alignItems:"center"}}>  
  3.           <Text style={{fontSize:40}}>你好,</Text>  
  4.           <Text style={{fontSize:15,alignSelf:"flex-end"}}>小明我们明天就要去</Text>  
  5.           <Text style={{fontSize:40}}>长城</Text>  
  6.           <Text style={{fontSize:15,alignSelf:"flex-end"}}>了</Text>  
  7.         </View>  
  8.       </View>  
结果:


明白了吧,alignSelf有“flex-start”,"flex-end","center",这几个属性。纳尼,“center”,得意我们是不是又发现了一种新的居中方式呢。不过alignSelf只适用于与父组件布局方向相垂直方向上的对齐方式。alignSelf的优先级大于alignItems

所以:居中如何实现呢,有下面几种方法

1】通过flex实现、2】通过flex实现、3】还是通过flex实现大笑

欢迎拍砖,后续给大家讲讲react-native内的局对布局,大坑

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入理解react native布局(一)居中 的相关文章

  • react-native-image-picker 4.0 集成

    github react native image picker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 showImagePicker 4 x相对于 2 x 3 x已删除 s
  • react native中ScrollView嵌套TextInput安卓端有滑动问题

    react native中ScrollView嵌套TextInput安卓端有滑动问题 1 1 问题描述 react native中ScrollView嵌套TextInput TextInput组件设置了 textAligin right 后
  • Flex 构建路径

    然libs文件夹是构建路径的一部分 但它并不总是SWC的理想存放位置 当多个项目同时使用相同的SWC时 就不能都存放在libs文件夹中 在这种情况下 SWC可以保持在中心位置 众所周知 SWC路径可以被添加到构建路径中 虽然这意味着需要建立
  • 框架分析(8)-React Native

    框架分析 8 React Native 专栏介绍 React Native 特性和优势 跨平台开发 热更新 原生性能 组件化开发 第三方库支持 社区支持 限制和挑战 性能问题 第三方库兼容性 学习曲线 总结 专栏介绍 link 主要对目前市
  • Lex和Yacc应用方法(一).初识Lex

    Lex和Yacc应用方法 一 初识Lex 草木瓜 20070301 Lex Lexical Analyzar 词法分析生成器 Yacc Yet Another Compiler Compiler编译器代码生成器 是Unix下十分重要的词法分
  • react native里获取设备屏幕宽高

    react native里获取设备屏幕宽高 不多说 方法如下 import Dimensions from react native var height width Dimensions get window height 即为屏幕高度
  • 入职外包一个月,我离职了。

    点击上方 程序员黑叔 选择 置顶或者星标 你的关注意义重大 前言 由于最近面试了几个人 印象最深刻的求职者是world 匿名 一个普普通通在深圳打拼的小年轻 来深圳两年 见过深圳粤海街道凌晨5点的夜晚 经历过公司从裁员到倒闭 为了生活 也去
  • Flex中字符串String按照格式转化为日期Date的方法

    在Flex中 要通过传入时间的字符串和格式字符串的方式来转换出Date Flex本身没有完善的方法 不知道Adobe在想什么 这么简单实用的功能都没有 回想起来 还是java神马的好 在网上找了好久都没有完善的解决方案 最后偶然发现Date
  • LVGL8学习之row and a column layout with flexbox

    这一篇来学习一下基于flexbox 柔性盒子 简单行和列布局 还是通过codeblock来模拟代码的运行 可设置layout对象内部的水平和竖直填充 以及布局内各item之间的间隔填充 代码如下 void lv flex layout te
  • React Native 获取屏幕的尺寸

    学习React Native的过程就是不断的研究的过程 接下来说一下两种获取屏幕的尺寸的两种方式 第一种 引入 const Dimensionsss require Dimensions const width height scale D
  • flex学习 ------- 复写treeItemrenderer 给树形菜单加复选框

    项目中菜单树 复选框的需求 以为像平常的list控件加个itemrender就可以搞定 谁知道不是那么回事 果断baidu 看到有大神写过 果断看tree的源码 发现 tree在构造函数中已经默认设置了一个itemrnederer 而且它的
  • 【Android】java.lang.UnsatisfiedLinkError: No implementation found for void xx xx xx -- 问题解决

    Android在开发过程中总会出现各种各样的bug 要想畅通无阻的完成一个app的 开发工作固然有点难度 这不 我的程序跑着跑着又报错了 AndroidRuntime FATAL EXCEPTION Thread 4903 Process
  • (转载)Flutter、Weex、React Native和Android原生对比报告

    Flutter Weex React Native和Android原生对比报告 Zhang Jun的博客 CSDN博客
  • 使用less处理重复性background-image定位问题

    1 问题描述 使用angular的列表循环解释问题 其他框架类似 css上面使用flex布局 index html代码 div class container div class item div class div p class ite
  • flex弹性布局教程-07容器属性flex-direction

    本节目标 掌握flex direction的使用 了解主轴变化的概念 内容摘要 本篇讲解了容器属性 flex direction 用来设置主轴的方向 阅读时间大约10 15分钟 flex容器属性 前面讲的属性都是设置在项目上的 另外还有6个
  • React Native

    小手动一动 点赞转发加关注 微信搜索 大前端杂货铺 公众号关注大前端老司机带您遨游大前端知识的海洋 关注 Github https github com big frontend 还有大前端代码实践哦 java 与 javascript 互
  • vue flex 布局实现div均分自动换行

    vue flex 布局实现div均分自动换行 许久没有更新了 今天才意外发现以前还是没有看懂盒模型 今天才算看懂了 首先我们今天来看一下想要实现的效果是什么 当然适配是必须的 1920 或者 1376都测试过 效果如图所选中区域所示 一 关
  • Flex布局详细介绍

    flex布局 1 概念 Flex是Flexible Box的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 1 1任何一个容器都可以指定为Flex布局 box display flex 1 2行内元素也可以使用Flex布局 box d
  • flex布局详解

    声明 本人的所有博客皆为个人笔记 作为个人知识索引使用 因此在叙述上存在逻辑不通顺 跨度大等问题 希望理解 分享出来仅供大家学习翻阅 若有错误希望指出 感谢 flex基本概念 任何一个容器都可以指定为Flex布局 例如 box displa
  • react-native使用动画Animated

    官方网文档 动画 Animated 一些精彩的例子 React Native 动画 Animated 渐变组件的使用 ReactNative 进阶 四十五 渐变组件 react native linear gradient 需要实现如下的动

随机推荐

  • Java正则校验密码至少包含:字母数字特殊符号中的2种

    一 语法 字符 说明 将下一字符标记为特殊字符 文本 反向引用或八进制转义符 例如 n匹配字符 n n 匹配换行符 序列 匹配 匹配 匹配输入字符串开始的位置 如果设置了 RegExp 对象的 Multiline 属性 还会与 n 或 r
  • 软件测试工程师自我介绍(范本)

    一 先介绍自己的基本信息 要注意扬长避短 1 年纪太大与太小 就不要主动去说明 比如你的年纪只有20岁 例子 我叫 从事软件测试工作有几年了 2 不是计算机相关专业毕业的也不要过多的去提 比如你的专业是机械专业 例子 我叫 从事软件测试工作
  • python selenium 滑动验证码

    def png from PIL import Image img Image open 1 png z img size data img convert RGB load for i in range z 0 dd for e in r
  • 【CMD】执行adb devices找不到设备的问题

    首先描述一下当时遇到的情况 手机USB连接电脑提示正常 设备管理器显示手机设备正常 问题是执行命令adb devices找不到设备 在Windows系统 资源管理器下 找到Android Sdk路径打开 看看那个文件夹platform to
  • spring的jdbcTemplate批量添加数据,单条数据中文正常,多数据第二条数据开始中文乱码

    今天用spring的jdbcTemplate org springframework jdbc core JdbcTemplate 批量添加数据 方法是jdbcTemplate bathUpdate 然后遇到一个很神奇的问题 批量添加的数据
  • 【精】彻底吃透HDFS写流程(5)-- DataStreamer线程类run方法分析以及如何构建pipeline?

    有关HDFS写流程的系列文章 精 彻底吃透HDFS写流程 1 BlockConstructionStage 精 彻底吃透HDFS写流程 2 Namenode侧create文件 精 彻底吃透HDFS写流程 3 DataStreamer线程和输
  • Android Studio及JDK完整详细安装

    本博文源于安卓基础旨在讨论如何搭建Android开发环境 下面进入步骤 了解安卓开发需要的工具 安装步骤 安装文件的下载 JDK的安装 Android Studio的安装与Android SDK的下载 基本开发的环境配置 安装文件的准备 首
  • 还是 “月饼” 后续,玩转炫彩 “月饼” 之 问题说明

    画一个 月饼 陪我过中秋 开发板后续问题跟进说明 目录 前言 一 出现问题 二 寻求办法 三 若有所思 四 问题测试 结语 悬赏送开发板 前言 本文有纯理论玩家是永远不会经历的实际问题 嵌入式工程师不动手永远出不了作品 本文最后有送开发板的
  • sqoop初步使用

    一 概述 Sqoop是一款开源的数据导入导出工具 可以将传统的关系型数据库导出至HDFS 也可以将HDFS中的数据导出至关系型数据库 官网 http sqoop apache org 原理 在Hadoop生态体系中 计算基本依赖于MR 那么
  • PHP如何使用Ds\Queue Capacity()函数?代码实例

    Ds Queue capacity PHP中的函数用于检查Queue实例的当前容量 语法 int public Ds PriorityQueue capacity void 参数 此功能不接受任何参数 返回值 此函数返回Queue实例的当前
  • stata学习笔记

    离散被解释变量 二值选择型 二值选择模型 多值选择型 多项选择模型 条件选择 混合 排序数据 排序模型 非负整数计数型 泊松 负二项 二值选择型 采用logit和probit模型 probit即把logit换一下就好 logit y x1
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • C++11 删除 字符串中的空格

    include
  • android 反射机制和反射调用方法

    对于android 中很多类没有开放出来 考虑到这些API不稳定 后续有可能会更改 所有没有在SDK中暴露出来给用户使用 但是我们在开放的过程中还是需要使用到一些android 系统中未开放出来的class 这时候我们就可以通过反射机制来调
  • 商品期货手续费一般是万分之十以内(商品期货手续费一般是万分之十以内吗)

    商品期货手续费一般 商品期货手续费普遍是极端之十以内 普遍是极端之10以内 简直看期货公司收取规范 普遍每个期货公司规范纷歧 海内四家期货买卖所颁布贬低一切期货买卖种类的手续费规范 各种类降费比率从12 5 到50 不等 期货买卖所手续费水
  • websocket的属性readyState

    websocket的属性readyState webSocket的readyState属性用来定义连接状态 该属性的值有下面几种 0 对应常量CONNECTING numeric value 0 正在建立连接连接 还没有完成 The con
  • MultipartFile上传文件报文件不存在的几种情况

    首先先了解一下从上传到保存整个流程是怎样的 然后在举几个文件不存在的例子 前端传进来一个文件 spring把文件保存到临时目录里 也就是 tmp tomcat 文件夹里 这个目录是在程序启动时创建的 目录也可以自定义 临时文件是 tmp结尾
  • matlab2019a中LSTM网络使用方法及源码示例(Deep Learning Toolbox系列篇6)

    此示例说明如何使用长短期记忆 LSTM 网络对序列数据进行分类 要训练深度神经网络以对序列数据进行分类 可以使用 LSTM 网络 LSTM 网络允许您将序列数据输入网络 并根据序列数据的各个时间步进行预测 此示例使用 1 和 2 中所述的日
  • 滑动指示器导航源码html+css

  • 深入理解react native布局(一)居中

    刚刚做完了一个项目 基本上把react native各种布局方式都用上了 发现了很多坑 也学会和很多 这里给大家分享一下哈 首先我们要有个概念 react native里面是兼容大部分我们在css里面用到的布局方式 此外接触过css里面fl