• Google开源框架盒子模型之Android---<FlexboxLayout>(认知篇)


    Github地址如下:

    Github地址:https://github.com/google/flexbox-layout

    什么是FlexboxLayout?

      FlexBoxLayout是Android版的具有CSS部分功能的盒子模型。

    Android Studio添加依赖?

       如果你使用的是Android Studip那么请在你的module下的build.gradle文件中添加如下依赖
      稳定版本:

            dependencies {
                compile 'com.google.android:flexbox:0.2.6'
            }        

    怎么去使用?
      FlexboxLayout集成ViewGroup,看起来有点像Linearlayout和RelativeLayout,自带很多属性,你可以在XML文件中去使用他。
      像这样:

     1 <com.google.android.flexbox.FlexboxLayout
     2     xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:app="http://schemas.android.com/apk/res-auto"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     app:flexWrap="wrap"
     7     app:alignItems="stretch"
     8     app:alignContent="stretch" >
     9 
    10     <TextView
    11         android:id="@+id/textview1"
    12         android:layout_width="120dp"
    13         android:layout_height="80dp"
    14         app:layout_flexBasisPercent="50%"
    15         />
    16 
    17     <TextView
    18         android:id="@+id/textview2"
    19         android:layout_width="80dp"
    20         android:layout_height="80dp"
    21         app:layout_alignSelf="center"
    22         />
    23 
    24     <TextView
    25         android:id="@+id/textview3"
    26         android:layout_width="160dp"
    27         android:layout_height="80dp"
    28         app:layout_alignSelf="flex_end"
    29         />
    30 </com.google.android.flexbox.FlexboxLayout>

      或者是通过代码的方式去使用它

    1 FlexboxLayout flexboxLayout = (FlexboxLayout) findViewById(R.id.flexbox_layout);
    2 flexboxLayout.setFlexDirection(FlexboxLayout.FLEX_DIRECTION_COLUMN);
    3 
    4 View view = flexboxLayout.getChildAt(0);
    5 FlexboxLayout.LayoutParams lp = (FlexboxLayout.LayoutParams) view.getLayoutParams();
    6 lp.order = -1;
    7 lp.flexGrow = 2;
    8 view.setLayoutParams(lp);

    FlexboxLayout自带属性的使用?

      flexDirection属性:

        该属性决定了主轴方向,类似于LinearLayout的orientation,用于表示其子类分布排列方向。

        与之对应的属性值有:

        row(default):这个是个默认值,该属性对其所有子控件横向排列,如图:

        

        row_reverse:在row是从左往右,row_reverse是从右往左,如图:

        

        column:方向上为竖直排列,正好和row想反.

        column_reverse:方向上为竖直排列,正好和row_reverse想反.

        这里引入一张官方的gif图片,以便于大家的理解.

        

      flexWrap属性:

        该属性用于确认当主轴放置的子控件大小超过自身时的处理。(单行或者是多行的处理方式)

        nowrap:不换行

        wrap:换行

        wrap_reverse: 假设按照主轴方向为row,那么该属性表现为左往右,并且从下往上的排列方式。

        这里同样引入官方的gif图片:

        

      justifyContent属性:

        用于控制主轴(取决于flex box的方向)中子控件的分部方式。

        flex_start(default):默认的值,左对齐.

        flex_end:右对齐.

        center:居中对齐.

        space_between:两端对齐盒子跟根布局,等分子控件剩余的空间间隔(这里增加的仅仅是控件间的margin值,并不会直接影响到子控件本身的大小)..

         space_around:等分子控件剩余的空间间隔(这里增加的仅仅是控件间的margin值,并不会直接影响到子控件本身的大小).

        官方gif图片:

        

      alignItems属性:

        控制与主轴的相交的轴上的对齐方式.(仅仅控制每一行行内的排列方式)

        stretch:填充整行.

        flex_start:交叉轴的其实位置.(假如当前flex box的方向是row,这时候flex_start表示在flex_box的左上方位置)

        flex_end:交叉轴的终点位置.(假如当前flex box的方向是row,这时候flex_end表示在flex_box的左下方位置)

        center:交叉轴的中心位置.(假如当前flex box的方向是row,这时候center表示在flex_box的中间位置且左对齐)

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

        官方gif图片:

        

        

      alignContent属性:

        该属性正好对应JustifyContent属性,功能大致相等,但是方向正好相反,表示为与主轴相交轴的方向上的每行子控件的排列方式,并且多了一个属性

      stretch.

        改属性对应的值:

        stretch(default):填充整行.

        flex_start:交叉轴的起点对齐.

        flex_end:交叉轴的终点对齐.

        center:交叉轴的中心对齐.

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

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

        

      layout_alignSelf属性:

        该属性是为了当flex box设置了alignItem之后,其中某个控件想自己定义自己的对齐方式,可以通过这个属性去覆盖flex box赋予自己的对齐效果.

        auto(default):使用alignitem赋予自己的对齐效果.

        stretch:填充整行.

        flex_start:交叉轴的其实位置.(假如当前flex box的方向是row,这时候flex_start表示在flex_box的左上方位置)

        flex_end:交叉轴的终点位置.(假如当前flex box的方向是row,这时候flex_end表示在flex_box的左下方位置)

        center:交叉轴的中心位置.(假如当前flex box的方向是row,这时候center表示在flex_box的中间位置且左对齐)

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

      子元素属性layout_order:

        顾名思义就是排列顺序,数值越小越靠前,这里仅仅是控制在flex box中的子控件的排列顺序和位置.
    子控件属性layout_flexGrow:

        这里是大概可以理解为线性布局的权重,只有当空间存在多余会自动放大自身。默认值是0不进行放大处理.该属性不允许属性值为小于零.

      子控件属性flex_flexshrink:

        这里跟layout_flexGrow属性正好相反,是为了当空间不足时候,缩小比例。默认值为0,不缩小。该属性不允许属性值为小于零.

      

       ------------------------------未完待续------------------------

  • 相关阅读:
    lingpipe
    小白都会的邮件推送?你还不会吗?
    怎么拿到签到王者的勋章?
    分享几个学习鸿蒙的社区平台
    小白都会的一键软件搬家?你还不会吗?
    博客网站接入网站统计
    CSDN博客怎么别人的文章?
    HarmonyOS的组件、布局和事件三者的关系
    Markdown格式快速转换为富文本格式
    Python学习
  • 原文地址:https://www.cnblogs.com/liemng/p/6650308.html
Copyright © 2020-2023  润新知