FlexboxLayout——花樣瀑布流

項目需要實現(xiàn)一個瀑布流的功能,正好了解到FlexboxLayout布局许溅,便準(zhǔn)備用FlexboxLayout來實現(xiàn)

一、什么是FlexboxLayout

看一下Github對這個庫的介紹:FlexboxLayout is a library project which brings the similar capabilities ofCSS Flexible Box Layout Moduleto Android. 意思是:FlexboxLayout是一個Android平臺上與CSS的 Flexible box 布局模塊 有相似功能的庫童谒。Flexbox 是CSS 的一種布局方案纫溃,可以簡單、快捷的實現(xiàn)復(fù)雜布局赁酝。FlexboxLayout可以理解成一個高級版的LinearLayout犯祠,因為兩個布局都把子view按順序排列。兩者之間最大的差別在于FlexboxLayout具有換行的特性酌呆。

二雷则、 FlexboxLayout效果圖

image
image

三、FlexboxLayout重要屬性

1.flexDirection:

flexDirection屬性決定了主軸的方向肪笋,即FlexboxLayout里子Item的排列方向,有以下四種取值:

row (default): 默認(rèn)值度迂,主軸為水平方向藤乙,從左到右。

row_reverse:主軸為水平方向惭墓,起點在有端坛梁,從右到左。

column:主軸為豎直方向腊凶,起點在上端划咐,從上到下拴念。

column_reverse:主軸為豎直方向,起點在下端褐缠,從下往上政鼠。

2.flexWrap

flexWrap 這個屬性決定Flex 容器是單行還是多行,并且決定副軸(與主軸垂直的軸)的方向队魏。可能有以下3個值:

noWrap: 不換行公般,一行顯示完子元素。

wrap: 按正常方向換行胡桨。

wrap_reverse: 按反方向換行官帘。

3.justifyContent

justifyContent 屬性控制元素主軸方向上的對齊方式,有以下5種取值:

flex_start (default): 默認(rèn)值昧谊,左對齊

flex_end: 右對齊

center: 居中對齊

space_between: 兩端對齊刽虹,中間間隔相同

space_around: 每個元素到兩側(cè)的距離相等。

4.alignItems

alignItems 屬性控制元素在副軸方向的對齊方式呢诬,有以下5種取值:

stretch (default) :默認(rèn)值涌哲,如果item沒有設(shè)置高度,則充滿容器高度馅巷。

flex_start:頂端對齊

flex_end:底部對齊

center:居中對齊

baseline:第一行內(nèi)容的的基線對齊

5.alignContent

alignContent 屬性控制多根軸線的對齊方式(也就是控制多行膛虫,如果子元素只有一行,則不起作用)钓猬,可能有以下6種取值:

stretch (default): 默認(rèn)值稍刀,充滿交叉軸的高度(測試發(fā)現(xiàn),需要alignItems 的值也為stretch 才有效)敞曹。

flex_start: 與交叉軸起點對齊账月。

flex_end: 與交叉軸終點對齊。

center: 與交叉軸居中對齊澳迫。

space_between: 交叉軸兩端對齊局齿,中間間隔相等。

space_around: 到交叉軸兩端的距離相等橄登。

以下介紹幾個子元素支持的重要屬性

layout_flexGrow(float)

layout_flexGrow 子元素的放大比例抓歼, 決定如何分配剩余空間(如果存在剩余空間的話),默認(rèn)值為0,不會分配剩余空間拢锹,如果有一個item的 layout_flexGrow 是一個正值谣妻,那么會將全部剩余空間分配給這個Item,如果有多個Item這個屬性都為正值,那么剩余空間的分配按照layout_flexGrow定義的比例(有點像LinearLayout的layout_weight屬性)卒稳。

layout_flexBasisPercent (fraction)

layout_flexBasisPercent的值為一個百分比蹋半,表示設(shè)置子元素的長度為它父容器長度的百分比,如果設(shè)置了這個值充坑,那么通過這個屬性計算的值將會覆蓋layout_width或者layout_height的值减江。但是需要注意染突,這個值只有設(shè)置了父容器的長度時才有效(也就是MeasureSpec mode 是 MeasureSpec.EXACTLY)。默認(rèn)值時-1辈灼。

四份企,如何實現(xiàn)

1、添加依賴

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

2.布局文件


    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:id="@+id/flexbox_layout"

    android:layout_width="wrap_content"

    android:layout_height="match_parent"

    app:alignContent="stretch"

    app:flexDirection="row"

    app:flexWrap="wrap">

        android:id="@+id/text1"

        android:layout_width="wrap_content"

        android:layout_height="100dp"

        android:text="1"

        app:layout_flexGrow="1.0" />

        android:id="@+id/text2"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:text="2"

        app:layout_wrapBefore="true" />

        android:id="@+id/text3"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:text="3" />

</com.google.android.flexbox.FlexboxLayout>

也可以通過代碼設(shè)置排列方向等:


flexboxLayout.setFlexDirection(FlexDirection.ROW);

View view = flexboxLayout.getChildAt(0);

FlexboxLayout.LayoutParams lp = (FlexboxLayout.LayoutParams) view.getLayoutParams();

lp.order = -1;

lp.flexGrow = 2;

view.setLayoutParams(lp);```

## 五茵休、 RecyclerView 的支持

#### 1.在布局文件中放入recyclerView就行了

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

    android:id="@+id/test_recyclerView"

    android:layout_width="match_parent"

    android:layout_height="match_parent"/>

2.設(shè)置recylerView的LayoutManager


RecyclerViewmRecyclerView=(RecyclerView)findViewById(R.id.test_recyclerView);FlexboxLayoutManagerlayoutManager=newFlexboxLayoutManager();layoutManager.setFlexWrap(FlexWrap.WRAP);//設(shè)置是否換行 layoutManager.setFlexDirection(FlexDirection.ROW);// 設(shè)置主軸排列方式layoutManager.setAlignItems(AlignItems.STRETCH);layoutManager.setJustifyContent(JustifyContent.FLEX_START);mRecyclerView.setLayoutManager(layoutManager);

3.Adapter 中綁定 View 的時候薪棒,設(shè)置子元素的屬性


if (lp instanceof FlexboxLayoutManager.LayoutParams) {

    FlexboxLayoutManager.LayoutParams flexboxLp = (FlexboxLayoutManager.LayoutParams) lp;

    flexboxLp.setFlexGrow(1.0f);

    flexboxLp.setAlignSelf(AlignSelf.FLEX_END);

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市榕莺,隨后出現(xiàn)的幾起案子俐芯,更是在濱河造成了極大的恐慌,老刑警劉巖钉鸯,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吧史,死亡現(xiàn)場離奇詭異,居然都是意外死亡唠雕,警方通過查閱死者的電腦和手機贸营,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岩睁,“玉大人钞脂,你說我怎么就攤上這事〔度澹” “怎么了冰啃?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刘莹。 經(jīng)常有香客問我阎毅,道長,這世上最難降的妖魔是什么点弯? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任扇调,我火速辦了婚禮,結(jié)果婚禮上抢肛,老公的妹妹穿的比我還像新娘狼钮。我一直安慰自己,他們只是感情好捡絮,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布燃领。 她就那樣靜靜地躺著,像睡著了一般锦援。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剥悟,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天灵寺,我揣著相機與錄音曼库,去河邊找鬼。 笑死略板,一個胖子當(dāng)著我的面吹牛毁枯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播叮称,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼种玛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓤檐?” 一聲冷哼從身側(cè)響起赂韵,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挠蛉,沒想到半個月后祭示,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡谴古,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年质涛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掰担。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡汇陆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出带饱,到底是詐尸還是另有隱情毡代,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布纠炮,位于F島的核電站月趟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恢口。R本人自食惡果不足惜孝宗,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耕肩。 院中可真熱鬧因妇,春花似錦、人聲如沸猿诸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梳虽。三九已至址芯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谷炸。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工北专, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旬陡。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓拓颓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親描孟。 傳聞我的和親對象是個殘疾皇子驶睦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350