Flexbox简介

flexbox是属于CSS的一种布局方案,可以简单、完整、响应式的实现各种页面布局。谷歌将其引入以提高复杂布局的能力。

源码传送门

Flexbox的布局和相关名称

上图模型中包含以下概念

flex container 父容器,用来包含子元素,对应于FlexboxLayout类。

flex item 子元素,父容器直接包裹的元素。

main axis 主轴,子元素通过主轴来排列,如上图是从左往右。

corss axis 副轴,垂直于主轴的第二个轴

main start,main end 父容器中主轴开始和结束的边界,子元素从main start往main end的方向排列(如果主轴是水平,起点在左端,main start,main end 用来控制子元素从左向右排列)

cross start,corss end 父容器中副轴开始和结束的边界。子元素从cross start往cross end方向排列(如果主轴是水平的,那么副轴就是垂直的,假设如上图,cross start 在上,cross end 在下,那么子元素就是从上往下排列)

Flexbox 布局示例

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:flexWrap="wrap"

app:alignItems="stretch"

app:alignContent="stretch" >

android:id="@+id/textview1"

android:layout_width="120dp"

android:layout_height="80dp"

app:layout_flexBasisPercent="50%"

/>

android:id="@+id/textview2"

android:layout_width="80dp"

android:layout_height="80dp"

app:layout_alignSelf="center"

/>

android:id="@+id/textview3"

android:layout_width="160dp"

android:layout_height="80dp"

app:layout_alignSelf="flex_end"

/>

或者代码

FlexboxLayout flexboxLayout = (FlexboxLayout) findViewById(R.id.flexbox_layout);

flexboxLayout.setFlexDirection(FlexboxLayout.FLEX_DIRECTION_COLUMN);

View view = flexboxLayout.getChildAt(0);

FlexboxLayout.LayoutParams lp = (FlexboxLayout.LayoutParams) view.getLayoutParams();

lp.order = -1;

lp.flexGrow = 2;

view.setLayoutParams(lp);

属性介绍

Contatiner的属性

flexDirection:子元素的排列方向,决定主轴和副轴的方向,有以下四个值,文字太鸡肋,直接看图结合demo一目了然。

row (default)

row_reverse

column

column_reverse

flexWrap:控制单行和多行,以及副轴的方向

nowrap (default) 不换行

wrap 换行

wrap_reverse 副轴方向置反

justifyContent 控制沿主轴对齐

flex-start(default):左对齐

flex-end:右对齐

center: 居中

space-between:两端对齐,项目之间的间隔都相等。

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

alignItems 控制沿副轴对齐(单行起作用)

stretch(default):如果项目未设置高度或设为auto,将占满整个容器的高度。

flex-start:交叉轴的起点对齐。

flex-end:交叉轴的终点对齐。

center:交叉轴的中点对齐。

baseline: 项目的第一行文字的基线对齐。

alignContent :控制沿副轴对齐(多行起作用)

stretch(default):轴线占满整个交叉轴。

flex-start:与交叉轴的起点对齐。

flex-end:与交叉轴的终点对齐。

center:与交叉轴的中点对齐。

space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。

space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

子元素的属性

layout_order: 控制子元素布局的顺序,默认值为1,顺序为XML中元素的顺序

layout_flexGrow 类似于weight。

layout_flexShrink 空间不足时,子元素缩小,如果为0,不变化

layout_alignSelf 允许单个元素有不一样的对齐方式,会覆盖align-item,除auto外,其他取值都和align-item的含义一致。

auto (default) 继承父元素的align-item

flex_start

flex_end

center

baseline

stretch

layout_flexBasisPercent 只能为百分比的值,只有父元素是MeasureSpec.EXACTLY的模式时才有效。

与传统CSS弹性布局不同之处

没有flex-flow属性 :因为没必要

没有flex属性:同样没必要

layout_flexBasisPercent 替代了flexBasis。如果子元素宽高确定了,可以指定具体值或百分比,如果是包裹内容,那只能是百分比

不能确定min-width和min-height:因为谷歌还没实现

android垂直排列元素_Android弹性布局(FlexboxLayout)相关推荐

  1. android垂直排列元素_元素的视图属性之client

    总结: clientLeft = border-left 如果有滚动条,clientLeft = border-left+ 滚动条宽度 clientWidth = content-width(内容实占 ...

  2. android 垂直的开关_安卓布局:如何让这两个按钮水平垂直居中

    代码: 代码: android:id="@+id/linearLayout1" android:layout_width="wrap_content" andr ...

  3. php响应式布局,响应式布局之弹性布局的介绍

    响应式布局的实现是前端工程中一个非常大的跨越,它非常灵活的可塑造性使得同一个网站能在不同的终端设备上展现出不同的活力.就今天这个机会,我想与大家分享并探讨一些常用来实现响应式布局方法中的弹性布局. 弹 ...

  4. 彻底搞懂弹性布局flex

    说明:大家在看弹性布局这一块,最好按照从上到下一点一点看,因为上下联系比较紧密. 点击这里,看原文带目录的. 弹性布局基本概念 任何一个容器都可以设置弹性布局,一旦容器设置了 弹性布局以后,子元素的f ...

  5. 弹性布局的主轴和交叉轴的区别

    弹性布局可以让块级元素横向显示,只要设置display:flex;就可以解决,也不会出现高度坍塌的问题. 弹性容器:定义了display:flex的那个元素.容器内部直接子元素进行弹性布局.简单的举个 ...

  6. HTML弹性布局基础讲解(一)

    一,弹性布局 弹性布局,又称"Flex布局",是W3C在2009年提出的方案. 主要解决某个元素中内部子元素的布局方式,为布局提供的非常大的灵活性和操控性. 任何一个容器都可以指定 ...

  7. [前端随笔][css] 弹性布局

    说在前面 弹性布局,顾名思义就是有弹性,能够根据屏幕/当前空间大小自由伸缩的.使用弹性布局可以很好的适应各种尺寸的客户端. 关键代码 display:flex; 设定元素为弹性布局 <文档传送门 ...

  8. [css] 你有用过弹性布局吗?说说你对它的理解

    [css] 你有用过弹性布局吗?说说你对它的理解 按我的经验在样式规律上大致分下类吧,等宽弹性布局单元素弹性布局多元素定比弹性布局等隙布局用 flex 或 grid 能非常轻松的完成以上效果,而 cs ...

  9. html弹性盒子垂直排列,css3弹性盒子布局

    css3弹性盒子布局 CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式. 引入弹性盒布局模型的目的是 ...

最新文章

  1. 计算机在线声音,电脑怎么在线录音
  2. wireshark合并多个文件_TEQC合并多个时段GPS RINEX文件
  3. Ubuntu:Ubuntu下安装Anaconda和Tensorflow的简介、入门、安装流程之详细攻略
  4. 蓝桥杯_算法训练_矩阵乘法
  5. StringBuilder的原理
  6. .NET与鲲鹏共展翅,昇腾九万里(二)
  7. php session 效率,大量php session临时文件带来的服务器效率问题
  8. javascript for in,for each,for循环遍历区别
  9. Spark之scala学习(基础篇)待更新
  10. 线程池三种队列使用,SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue
  11. 微软官方解读 Win11 操作系统
  12. Dcmtk在PACS开发中的应用(基础篇) 第二章 打印影像(胶片) 作者 冷家锋
  13. php list 传递 assign('list'_,thinkphp5分页传递参数
  14. 608. 两数和-输入已排序的数组
  15. 白话布隆过滤器BloomFilter
  16. vs哪个版本好用_5个版本17款白金爱他美,究竟选哪个?德国版/澳洲版/卓萃/英国.....
  17. c语言 指针 pdf,彻底搞定C指针.pdf
  18. 禁用Android底部虚拟按键
  19. 如何将多张图片拼成一张图?
  20. Java mail使用QQ邮箱发送邮件配置方案

热门文章

  1. windows下mysql安装失败的一个解决案例
  2. ES Next Arrow function Promise Iterator Generator yield Async Await
  3. 怎么操作会导致MySQL锁表
  4. 8. php回调后门
  5. struts-2.5.14.1 中web.xml的基本配置
  6. [Java并发编程(二)] 线程池 FixedThreadPool、CachedThreadPool、ForkJoinPool?为后台任务选择合适的 Java executors...
  7. [jQuery]无法获取隐藏元素(display:none)宽度(width)和高度(height)的新解决方案
  8. 【笔记】jstree插件的基本使用
  9. Dev Winform 简洁界面模板制作
  10. 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式