第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android上的Flexbox布局

標簽:
Android

简介

最近Google开源了一个叫flex-box的库,它的思路是参照的CSS的Flex布局设计的,所以属性基本都是和CSS上的Flex布局保持一致,但因为是两个不同的平台,所以减少了几个不适用于Android的属性,新增了几个属性,具体我们下面会说到。

关于CSS的Flex布局

在了解Google开源的flex-box,我觉得有必要先了解下CSS的Flex布局,这有助于我们理解那些属性定义。关于这方面的知识,可以阅读这篇博客。下面我们只是简要的了解下,具体属性我们放到讲解Google的flex-box中去说明。

//这段文字说明,来源于上面说到的博客采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。




5ba1ef8800018b4005630333.jpg概念




关于Google的flexbox-layout

注意:以下文中用到的flexbox-layout指的是Google开源的库,Flex指的是CSS中的Flex布局。

首先我们需要知道的是,flexbox-layout的基本概念和Flex是一样的,最外面的这层布局称为容器,在flexbox-layout指的是com.google.android.flexbox.FlexboxLayout,里面的子元素称为项目。容器默认存在两条轴,其中水平(这里是就上面的概念图而言,因为主轴的方向是可以指定的)的这条轴称为主轴(个人理解,可以存在多条,具体原因后面讲),垂直的这条称为交叉轴。其他属性比如startend等等也是一样的,具体可以看上面的基本概念图。

下面我们着重讲下flexbox-layout支持的属性,因为它既支持容器属性,也支持项目属性,所以我们分成两个篇幅来说明。

注意:以下属性设置的具体效果请参照说明文档和Demo,github地址

容器属性

flexDirection

这个属性用于确定主轴方向,可选的值有:


5ba1ef8900010ac307960203.jpgflexDirection


row 水平方向,起点在左边。默认值

row_revers 水平方向,起点在右边。

column 垂直方向,起点在上边。

column_reverse 垂直方向,起点在下边。

flexWrap

这个属性控制容器是单行还是自动换行,以及主轴的方向,可选的值有:

关于wrapwrap-reverse的区别:


5ba1ef890001621507000177.jpgwrap



5ba1ef8900014a8a07000177.jpgwrap-reverse


nowrap 单行。默认值

wrap 自动换行,第一行在上方

wrap-reverse 自动换行,第一行在下方

justifyContent

这个属性控制项目在主轴上的对齐方式,可选的值有:

注意:具体的对齐方式与主轴的方向有关,下面的说明是基于默认值

关于space_betweenspace_around的样式如下:

  1. flex_start 左对齐,默认值

  2. flex_end 右对齐

  3. center 居中对齐

    space_between 两端对齐,项目之间的间隔相等

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

    alignItems

    这个属性定义项目在交叉轴上的对齐方式,可选的值有:

    注意:具体的对齐方式与主轴的方向有关

    关于stretchbaseline的样式如下:





  4. stretch 占满整个容器高度,默认值

  5. flex_start 交叉轴的起点对齐

  6. flex_end 交叉轴的终点对齐

  7. center 居中对齐

  8. baseline 项目的第一行文字的基线对齐

alignContent

这个属性控制容器的多条主轴的对齐方式,这也是我们前面提到的主轴可以有多条,当flexWrap:wrap|wrapreverse。可选的值有:

注意:只有一条主轴,该属性不起作用

这里需要注意区别下和alignItems的区别,alignContent是多条主轴基于交叉轴的对齐方式,而后者是项目基于交叉轴的对齐方式,一个是轴,一个是项目。

  1. stretch 占满整个交叉轴,默认值

  2. flex_start 与交叉轴的起点对齐

  3. flex_end 与交叉轴的终点对齐

  4. center 与交叉轴的中心对齐

  5. space_between 与交叉轴两端对齐,轴线之间的间隔平均分布

  6. space_around 每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍

showDividerHorizontal

dividerDrawableHorizontal

showDividerVertical

dividerDrawableVertical

showDivider

dividerDrawable

这几个属性都是跟分隔符有关,具体用法可以看文档。

项目属性

layout_order(integer)

这个属性可以改变项目的排列顺序,默认值为1

layout_flexGrow(float)

这个属性定义项目基于当前行的放大比例,默认值为0。这个属性类似LinearLayout中的layout_weight属性,如果当前行只有一个项目的layout_flexGrow为正值,则该项目将占满当前行剩余的空间,下面的效果是三个相同大小的项目,其中一个layout_flexGrow为正值的效果:

如果存在多个layout_flexGrow为正值的情况,则这几个项目则会按设置的值为比例占用当前行剩余的空间,下面的效果是三个相同大小的项目,其中两个项目设置layout_flexGrow:1


  • layout_flexShrink (float)

    这个属性定义了项目的缩小比例,默认为1,即如果当前行空间不足,该项目缩小的方式。

    如果所有项目的layout_flexShrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的layout_flexShrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

    个人理解,注意:要设置flexWrap:nowrap为单行

  • layout_alignSelf

    该属性允许单个项目与其他项目不一样的基于交叉轴的对齐方式。默认值为auto,即按照容器的alignItems属性,设置其他值,则会覆盖容器的值,可选的值:

  1. auto 默认值

  2. flex_start

  3. flex_end

  4. center

  5. baseline

  6. stretch

layout_flexBasisPercent (fraction)

这个属性设置项目长度相对于容器的百分比,如果设置了这个值,则从layout_widthlayout_height指定的长度会被覆盖,需要注意的是,这个属性只在容器长度确定的情况下有效,即MeasureSpec.EXACTLY。默认值为-1,表示不设置。

layout_minWidth / layout_minHeight (dimension)

layout_maxWidth / layout_maxHeight (dimension)

这些属性设置对项目的最大最小限制

layout_wrapBefore (boolean)

这个属性默认值为false,如果设置为true,则该项目将强制成为当前行的第一个项目,会忽略flex_wrap:nowrap设置。

应用实例

  1. 底部按钮


    flexbox-layout_fixbottom.png底部按钮


  2. 流式布局


    flexbox-layout_flowlayout.png

收藏

原文链接:http://www.apkbus.com/blog-719059-63464.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消