Android 布局 FlexboxLayout 彈性布局

1 開始使用

  compile 'com.google.android:flexbox:0.3.0-alpha4'

2 常用父布局屬性

  • app:flexDirection 設(shè)置主軸方向(item的排列方向)
row (default): 默認(rèn)值,主軸為水平方向茶鹃,從左到右师坎。
row_reverse:主軸為水平方向伊滋,從右到左猜憎。
column:主軸為豎直方向则奥,從上到下所踊。
column_reverse:主軸為豎直方向辉哥,從下往上。
app:flexDirection
  • app:flexWrap 設(shè)置是否換行
noWrap (default):不換行耳贬,一行顯示完子元素踏堡。
wrap: 按正常方向換行。
wrap_reverse: 按反方向換行咒劲。

【例圖其他屬性】

 app:flexDirection="row"
app:flexWrap
  • app:justifyContent 設(shè)置主軸上元素的對齊方式
flex_start (default): 默認(rèn)值顷蟆,左對齊
flex_end: 右對齊
center: 居中對齊
space_between: 兩端對齊,中間間隔相同
space_around: 每個元素兩側(cè)的距離相等缎患。所以慕的,項目之間的間隔比項目與邊框的間隔大一倍。

【例圖其他屬性】

 app:flexDirection="row"
 app:flexWrap="wrap"
app:justifyContent
  • app:alignItems 設(shè)置副軸上元素的對齊方式(針對每個單行)
stretch (default) :默認(rèn)值挤渔,如果item沒有設(shè)置高度肮街,則充滿容器高度。
flex_start:交叉軸的起點對齊判导。
flex_end:交叉軸的終點對齊嫉父。
center:交叉軸的中點對齊。
baseline:第一行內(nèi)容的基線對齊

【例圖其他屬性】

    app:flexDirection="row"
    app:flexWrap="wrap"
    app:justifyContent="flex_start"
app:alignItems
  • app:alignContent 設(shè)置副軸上元素的對齊方式(針對多行的整個容器)
stretch (default): 默認(rèn)值眼刃,充滿交叉軸的高度(需要alignItems 的值也為stretch 才有效)绕辖。
flex_start: 與交叉軸起點對齊。
flex_end: 與交叉軸終點對齊擂红。
center: 與交叉軸居中對齊仪际。
space_between: 交叉軸兩端對齊,中間間隔相等。
space_around: 到交叉軸兩端的距離相等树碱。所以肯适,軸線之間的間隔比軸線與邊框的間隔大一倍。

【例圖其他屬性】1成榜,2

    app:flexDirection="row"
    app:flexWrap="wrap"
    app:justifyContent="flex_start"
//上面一排圖片
    app:alignItems="stretch"
//下面一排圖片
    app:alignItems="flex_start"
app:alignContent 圖1圖2

【例圖其他屬性】3

    app:flexDirection="row"
    app:flexWrap="wrap"
    app:justifyContent="flex_start"
    app:alignItems="flex_end"
app:alignContent 圖3 定義app:alignContent 順序和 圖1圖2一致

【例圖其他屬性】4

    app:flexDirection="row"
    app:flexWrap="wrap"
    app:justifyContent="flex_start"
    app:alignItems="center"
app:alignContent 圖4 定義app:alignContent 順序和 圖1圖2一致

【例圖其他屬性】5

    app:flexDirection="row"
    app:flexWrap="wrap"
    app:justifyContent="flex_start"
    app:alignItems="baseline"
app:alignContent 圖5 定義app:alignContent 順序和 圖1圖2一致
  • divider 類
    1.showDivider
    2.showDividerHorizontal
    3.showDividerVertical
    4.dividerDrawable
    5.dividerDrawableHorizontal
    6.dividerDrawableVertical
showDivider 控制顯示水平和垂直方向的分割線框舔,值為none | beginning | middle | end其中的一個或者多個。
showDividerHorizontal 控制顯示水平方向的分割線赎婚,值為none | beginning | middle | end其中的一個或者多個刘绣。
showDividerVertical 控制顯示垂直方向的分割線,值為none | beginning | middle | end其中的一個或者多個挣输。

dividerDrawable 設(shè)置水平和垂直方向的分割線Drawable纬凤。
dividerDrawableHorizontal 設(shè)置Flex 軸線之間水平方向的分割線Drawable。
dividerDrawableVertical 設(shè)置子元素垂直方向的分割線Drawable撩嚼。

3 常用子元素屬性

  • app:layout_order: 不指定默認(rèn)情況下子元素的排列方式按照文檔流的順序依次排序移斩,而app:layout_order可以控制排列的順序,負(fù)值在前绢馍,正值在后,按照從小到大的順序一次排列肠套。
  • app:layout_flexGrow : 子元素的放大比例舰涌, 決定如何分配剩余空間(如果存在剩余空間的話),默認(rèn)值為0,就是不放大你稚,如果有一個item的 layout_flexGrow 是一個正值瓷耙,那么會將全部剩余空間分配給這個Item,如果有多個Item這個屬性都為正值,那么剩余空間的分配按照layout_flexGrow定義的比例分配(有點像LinearLayout的layout_weight屬性)刁赖。

  • app:layout_flexShrink : 縮小比例搁痛,默認(rèn)為1,空間不足宇弛,項目縮小鸡典。如果屬性都為1,空間不足時枪芒,將等比縮小彻况。負(fù)值無效。

  • app:layout_alignSelf : 允許單個子元素與其它子元素有不一樣的對齊方式舅踪,可覆蓋alignltems屬性纽甘,默認(rèn)值為auto,表示繼承父元素的alignltems屬性抽碌,如沒有父元素悍赢,則等同于stretch。該屬性有6個值,除了auto左权,其它都與alignItems屬性一樣皮胡。
auto (default) 繼承父元素的alignItems
flex_start
flex_end
center
baseline
stretch
  • app:layout_flexBasisPercent :表示設(shè)置子元素的長度為它父容器長度的百分比,如果設(shè)置了這個值涮总,那么通過這個屬性計算的值將會覆蓋layout_width或者layout_height的值胸囱。但是需要注意,這個值只有設(shè)置了父容器的長度時才有效(也就是MeasureSpec mode 是 MeasureSpec.EXACTLY)瀑梗。默認(rèn)值時-1烹笔。
  • app:layout_minWidth / app:layout_minHeight 強制限制 FlexboxLayout的子元素(寬或高)不會小于最小值,不管layout_flexShrink這個屬性的值為多少抛丽,子元素不會被縮小到小于設(shè)置的這個最小值谤职。

  • app:layout_maxWidth / app:layout_maxHeight 強制限制FlexboxLayout子元素不會大于這個最大值, 不管layout_flexGrow的值為多少,子元素不會被放大到超過這個最大值亿鲜。

  • app:layout_wrapBefore 控制強制換行允蜈,默認(rèn)值為false,如果將一個子元素的這個屬性設(shè)置為true,那么這個子元素將會成為一行的第一個元素蒿柳。這個屬性將忽略flex_wrap 設(shè)置的 noWrap值饶套。

4 FlexboxLayoutManager 配合 RecyclerView 使用

mRecyclerView = (RecyclerView)findViewById(R.id.test_recyclerView);
FlexboxLayoutManager layoutManager = new FlexboxLayoutManager();
layoutManager.setFlexWrap(FlexWrap.WRAP);        
layoutManager.setFlexDirection(FlexDirection.ROW);   
     layoutManager.setAlignItems(AlignItems.STRETCH);        
layoutManager.setJustifyContent(JustifyContent.FLEX_START);
mRecyclerView.setLayoutManager(layoutManager);
//adapter 中設(shè)置子元素的放大比例
 ImageView IV=  rvViewHolder.getView(R.id.image_src);
       IV.setImageResource(mData);

        ViewGroup.LayoutParams lp = IV.getLayoutParams();
        if (lp instanceof FlexboxLayoutManager.LayoutParams) {
            FlexboxLayoutManager.LayoutParams flexboxLp =
                    (FlexboxLayoutManager.LayoutParams) mImageView.getLayoutParams();
            flexboxLp.setFlexGrow(1.0f);
        }

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市垒探,隨后出現(xiàn)的幾起案子妓蛮,更是在濱河造成了極大的恐慌,老刑警劉巖圾叼,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛤克,死亡現(xiàn)場離奇詭異,居然都是意外死亡夷蚊,警方通過查閱死者的電腦和手機构挤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕鼓,“玉大人筋现,你說我怎么就攤上這事∠淦纾” “怎么了夫否?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長叫胁。 經(jīng)常有香客問我凰慈,道長,這世上最難降的妖魔是什么驼鹅? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任微谓,我火速辦了婚禮森篷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豺型。我一直安慰自己仲智,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布姻氨。 她就那樣靜靜地躺著钓辆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肴焊。 梳的紋絲不亂的頭發(fā)上前联,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音娶眷,去河邊找鬼似嗤。 笑死,一個胖子當(dāng)著我的面吹牛届宠,可吹牛的內(nèi)容都是我干的烁落。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼豌注,長吁一口氣:“原來是場噩夢啊……” “哼伤塌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轧铁,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤寸谜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后属桦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡他爸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年聂宾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊笤。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡系谐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出讨跟,到底是詐尸還是另有隱情纪他,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布晾匠,位于F島的核電站场晶,受9級特大地震影響鳍贾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嫂用。 院中可真熱鬧,春花似錦、人聲如沸锥腻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘦黑。三九已至,卻和暖如春奇唤,著一層夾襖步出監(jiān)牢的瞬間幸斥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工冻记, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留睡毒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓冗栗,卻偏偏與公主長得像演顾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子隅居,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理钠至,服務(wù)發(fā)現(xiàn),斷路器胎源,智...
    卡卡羅2017閱讀 134,665評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,180評論 25 707
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案棉钧? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,754評論 1 92
  • 夜深人靜宪卿,霜華露重,突然文思泉涌不寫下來實在是浪費万栅。 我也不知道從哪里寫起佑钾。 想起,想起那些美好的瞬間烦粒,那些祥和的...
    _荷包蛋_閱讀 177評論 0 0
  • 便簽:第12拆 輔導(dǎo)導(dǎo)師:@柒公 R《你為什么總焦慮?》第124頁 完美主義者對于一切未知有著焦慮休溶,所以他們經(jīng)常要...
    書書何閱讀 182評論 0 0