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

时间:2021-08-21 05:27:09

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):这个是个默认值,该属性对其所有子控件横向排列,如图:

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

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

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

 

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

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

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

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

  flexWrap属性:

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

    nowrap:不换行

    wrap:换行

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

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

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

  justifyContent属性:

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

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

    flex_end:右对齐.

    center:居中对齐.

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

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

    官方gif图片:

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

  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图片:

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

 

 

    

  alignContent属性:

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

  stretch.

    改属性对应的值:

    stretch(default):填充整行.

    flex_start:交叉轴的起点对齐.

    flex_end:交叉轴的终点对齐.

    center:交叉轴的中心对齐.

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

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

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

 

  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,不缩小。该属性不允许属性值为小于零.

  

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