使用FlexboxLayoutManager來(lái)實現流式布局
發表時(shí)間:2020-10-19
發布人(rén):融晨科技
浏覽次數:196
在(zài)項目中經常會用到(dào)流式布局,以(yǐ)前一直是(shì)使用鴻洋開源的(de)哪個(gè)版本,然後在(zài)其上(shàng)進行修改,之(zhī)前看到(dào)了(le/liǎo)google開源了(le/liǎo)一個(gè)FlexboxLayoutManager的(de)控件,也(yě)可以(yǐ)實現流式布局,但是(shì)一直也(yě)沒有細看。今天偶然又見到(dào)一篇相關的(de)文章,這(zhè)裏簡單做一個(gè)記錄,以(yǐ)備以(yǐ)後使用。
[官方地(dì / de)址](https://github.com/google/flexbox-layout)
這(zhè)裏注意,它默認給出(chū)的(de)版本是(shì)androidX使用的(de),你看一下它下面的(de)說(shuō)明,非X使用的(de)版本在(zài)裏面有說(shuō)明。
好不(bù)多說(shuō),直接上(shàng)代碼,這(zhè)裏的(de)流式布局,采用的(de)是(shì)RecyclerView + FlexboxLayoutManager來(lái)實現的(de)。
我這(zhè)裏寫到(dào)了(le/liǎo)fragment裏,主要(yào / yāo)是(shì)當時(shí)爲(wéi / wèi)了(le/liǎo)試一下新寫的(de)懶惰加載功能。
fragment_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_Flexbox"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v7.widget.RecyclerView>
</LinearLayout>
FragmentOne.java
public class FragmentOne extends BaseFragment {
private RecyclerView rv_Flexbox;
private List<String> list_data;
private FlexBoxAdapter fAdapter;
//private FlexboxLayoutManager flexboxLayoutManager;
private Context mContext;
public FragmentOne(Context mContext) {
this.mContext = mContext;
}
@Override
protected void initView(View rootView) {
rv_Flexbox = (RecyclerView)rootView.findViewById(R.id.rv_Flexbox);
FlexboxLayoutManager flexboxLayoutManager = new FlexboxLayoutManager(mContext);
//flexDirection 屬性決定主軸的(de)方向(即項目的(de)排列方向)。類似 LinearLayout 的(de) vertical 和(hé / huò) horizontal。
flexboxLayoutManager.setFlexDirection(FlexDirection.ROW);//主軸爲(wéi / wèi)水平方向,起點在(zài)左端。
//flexWrap 默認情況下 Flex 跟 LinearLayout 一樣,都是(shì)不(bù)帶換行排列的(de),但是(shì)flexWrap屬性可以(yǐ)支持換行排列。
flexboxLayoutManager.setFlexWrap(FlexWrap.WRAP);//按正常方向換行
//justifyContent 屬性定義了(le/liǎo)項目在(zài)主軸上(shàng)的(de)對齊方式。
flexboxLayoutManager.setJustifyContent(JustifyContent.FLEX_START);//交叉軸的(de)起點對齊。
rv_Flexbox.setLayoutManager(flexboxLayoutManager);
list_data = new ArrayList<>();
fAdapter = new FlexBoxAdapter(getActivity(),list_data);
rv_Flexbox.setAdapter(fAdapter);
fAdapter.setOnItemClickLitener(new FlexBoxAdapter.OnItemClickLitener() {
@Override
public void rel="stylesheet">