android recyclerview流式布局,Android FlexboxLayout流式布局

Android FlexboxLayout流式布局

FlexBoxLayout是为Android带来了与 CSS Flexible Box Layout(CSS 弹性盒子)相似功能的库。

一:添加依赖

如果迁移的AndroidX中dependencies {

implementation 'com.google.android:flexbox:2.0.1'

}

否则:dependencies {

implementation 'com.google.android:flexbox:1.0.0'

}

二:实例:

布局添加:

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:flexWrap="wrap">

style="@style/TextStyle"

android:text="你真的这样的世界吗"/>

style="@style/TextStyle"

android:text="你真的了解中国吗" />

style="@style/TextStyle"

android:text="你真的了解你自己吗"/>

style="@style/TextStyle"

android:text="你了解你的父母吗" />

style="@style/TextStyle"

android:text="你..." />

style="@style/TextStyle"

android:text="我...." />

style="@style/TextStyle"

android:text="他...." />

TextStyle 布局风格

5dp

wrap_content

wrap_content

@drawable/shape_border

end

1

8dp

@android:color/black

在drawable下创建shape_border.xml

三、FlexboxLayout属性介绍app:flexWrap="nowrap"//该属性表示是否换行和换行的方向

flexWrap属性一共有三个枚举值,分别是nowrap、wrap和wrap_reverse

nowrap:单行显示,不换行,默认就是这个属性。

wrap:当内容超过一行时,自动换行。

wrap_reverse :反向换行(下一行内容在当前行之上)

android recyclerview流式布局,Android FlexboxLayout流式布局_第1张图片

app:flexDirection="column"//主轴方向按竖直(列)方向排版。效果:

android recyclerview流式布局,Android FlexboxLayout流式布局_第2张图片

column_reverse : 主轴方向按竖直(列)方向反向排版(从下向上)。

row : 主轴方向按水平(行)方向排版,默认就是这个属性

row_reverse : 主轴方向按水平(行)方向反向排版

app:justifyContent="flex_start"

关于这个属性,官方有一段说明:

作用是控制元素在主轴上的对齐方式,需要配合flexDirection或flexWrap属性来使用。

看一下源码,可见app:justifyContent属性有flex_start、flex_end、center、space_between、space_around和space_evenly6个枚举值。

android:layout_height="wrap_content"

app:flexWrap="wrap"

app:flexDirection="row"

app:justifyContent="flex_end">

app:flexDirection 得是row 是column 没效果

flex_start: 左对齐,默认值。

flex_end : 右对齐。

android recyclerview流式布局,Android FlexboxLayout流式布局_第3张图片

center:居中对齐。

space_between: 两端对齐。

space_around : 分散对齐。

space_evenly:子元素在一行内均匀分布空间。

4.app:alignItems="stretch"//该属性表示元素在每条轴线上的对齐方式。

注意:如果设置了alignContent,且值不为stretch,那么该属性失效。

我们改变每一子View的布局Padding 看看效果

style="@style/TextStyle"

android:text="你真的这样的世界吗"

android:padding="10dp"/>

style="@style/TextStyle"

android:text="你真的了解中国吗"

android:padding="20dp"/>

style="@style/TextStyle"

android:text="你真的了解你自己吗"

android:padding="5dp"/>

style="@style/TextStyle"

android:text="你了解你的父母吗"

android:padding="15dp"/>

app:alignItems属性有flex_start、flex_end、center、baseline和stretch

stretch: 默认值,如果子元素未设置高度,则沾满父布局高度。

flex_start :顶端对齐

android recyclerview流式布局,Android FlexboxLayout流式布局_第4张图片

flex_end :底端对齐。

center : 居中对齐。

baseline :按照第一个元素的基线对齐。

下面这张图片可以很直观的表达这个属性的作用

android recyclerview流式布局,Android FlexboxLayout流式布局_第5张图片app:alignContent="stretch"//该属性表示每条轴线在整个布局中的对齐方式。

app:alignContent属性有flex_start、flex_end、center、space_between、space_around和stretch6个枚举值。stretch:默认值,轴线占满整个父布局。

flex_start:顶部对齐所有轴线

flex_end:底部对齐所有轴线。

center:居中对齐所有轴线。

space_between:两端对齐所有轴线。

space_around:分散对齐所有轴线。

6.dividerDrawable (reference)//水平和竖直方向分割线。dividerDrawableHorizontal / dividerDrawableVertical (reference)//水平/竖直方向分割线。

app:showDivider="middle"//显示水平和竖直方向分割线方式。

android:layout_width="match_parent"

android:layout_height="wrap_content"

app:flexWrap="wrap"

app:flexDirection="row"

app:alignItems="flex_start"

app:dividerDrawable="@color/red"

app:showDivider="middle">

android recyclerview流式布局,Android FlexboxLayout流式布局_第6张图片

9.app:layout_order="2"//指定子元素排序优先级,值越小越排在前面,默认值为1。设置值类型为float。

style="@style/TextStyle"

android:text="你真的这样的世界吗"

android:padding="10dp"

app:layout_order="2"

/>

这样的话这样一条就排到最后去了app:layout_flexShrink="0"

子元素缩放比例,如果设置了换行(flexWrap=“wrap或wrap_reverse”)则该属性无效。

设置值类型为float,0表示不缩放,数值越大,缩放比例越大,默认为1,负值无效。

app:layout_flexGrow="0"

分配同一轴线剩余控件所占权重,默认值为0,表示不参与分配。用法类似于LinearLayout的weight,不过weight分配的是整个父布局控件,而layout_flexGrow分配的是同一行/列的剩余空间。

四:与RecyclerView配合使用public class FourActivity extends AppCompatActivity {

private RecyclerView recycler;

private FlexAdapter flexAdapter;

private List mDatas=new ArrayList<>();

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_four_one);

initData();

recycler= findViewById(R.id.recycler);

FlexboxLayoutManager manager=new FlexboxLayoutManager(this);

//设置主轴排列方式

manager.setFlexDirection(FlexDirection.ROW);

//设置是否换行

manager.setFlexWrap(FlexWrap.WRAP);

//manager.setAlignItems(AlignItems.FLEX_END);

recycler.setLayoutManager(manager);

flexAdapter=new FlexAdapter(this,mDatas);

recycler.setAdapter(flexAdapter);

}

private void initData() {

mDatas.add("我真的ok");

mDatas.add("你好世界");

mDatas.add("世界");

mDatas.add("你是一个AAA什么");

mDatas.add("我真的AAAok");

mDatas.add("你好世界AAA");

mDatas.add("世界AAA");

mDatas.add("你是一个什么AAA");

}

}

FlexboxLayoutManager 可以替换其他布局管理器实现流式布局

由于RecyclerView 的一些特性,Flexbox 的一些属性在FlexboxLayoutManager中没有实现,下面是FlexboxLayout和FlexboxLayoutManager支持的属性的对比:

android recyclerview流式布局,Android FlexboxLayout流式布局_第7张图片

END:螃蟹在剥我的壳,笔记本在写我。漫天的我落在枫叶上雪花上。而你在想我。

你可能感兴趣的:(android)