您當前位置>首頁 » 新聞資訊 » 技(jì)術(shù)分(fēn)享 >
使用(yòng)FlexboxLayoutManager來(lái "ε♦)實現(xiàn)流式布局
發表時(shí)間(jiān):2020-10-19
發布人(rén):葵宇科(kē)技(jì)
浏覽次數(shù):203
在項目中經常會(huì)用(yòng)到(dào)流式布局,以前一(♣©yī)直是(shì)使用(yòng)鴻洋開(kāi)源的(de)哪個(gè)版₽•↕♦本,然後在其上(shàng)進行(xíng)修改,之前看("¶☆→kàn)到(dào)了(le)google開(kāi)源了(le)一(yī)個(gè)Flexb$"∞oxLayoutManager的(de)控件(jiàn),也(yλ↓×ě)可(kě)以實現(xiàn)流式布局,但(dàn)是(s''¶↑hì)一(yī)直也(yě)沒有(yǒu)細看(kàn)。今天偶然← ✘☆又(yòu)見(jiàn)到(dào)一(yī)篇相(xiàng)™↔關的(de)文(wén)章(zhāng),這(zhè)裡(lǐ)簡單做(zu↓≤φ"ò)一(yī)個(gè)記錄,以備以後使用(>≥yòng)。
[官方地(dì)址](https://github.com/google/fle>'↕xbox-layout)
這(zhè)裡(lǐ)注意™ βf0c;它默認給出的(de)版本是(shì)androiσ©≈dX使用(yòng)的(de),你(nǐ)看(k↔γ<àn)一(yī)下(xià)它下(xià)面的(de)說(s♠✔huō)明(míng),非X使用(yòng)的(de)版本在裡(lǐ)面有™§←(yǒu)說(shuō)明(míng)。
好(hǎo)不(bù)多(du★>↑ō)說(shuō),直接上(shàng)代碼,這(zhè)λ≤∞α裡(lǐ)的(de)流式布局,采用(yòng)的(de)是(π₽shì)RecyclerView + FlexboxLayoutMan"∑ager來(lái)實現(xiàn)的(de)。
我≈÷±這(zhè)裡(lǐ)寫到(dào)了(le)fra→←¶gment裡(lǐ),主要(yào)是(shì)當時"(shí)為(wèi)了(le)試一(yī)下(xià)新寫的(de)懶惰加§ ∏•載功能(néng)。
fragment_one.xml
<?xml version="1.0" encoding<®<="utf-8"?>
<LinearLa÷≥yout xmlns:android="http:÷∞®//schemas.android.com/apk/res/android"
an©≠<droid:layout_width="m↑ atch_parent"
android:layout ↑&_height="match_parent→✔ 4;>
<android.support.÷¥v7.widget.RecyclerView
andr€§'oid:id="@+id/rv_Flexbox"
↕≤•∞ android:layout_width="match_parα∞ent"
android:layout_height="←λ;match_parent"></android.support.v7.₹€₩÷widget.RecyclerView>
</Li♣←$φnearLayout>
FragmentOne.java
public class FragmentOne extends BaseFragme∞♥nt {
private RecyclerView rv_Flexbox;
prλ±ivate List<String> list_data;
pr<'ivate FlexBoxAdapter fAdapter↔";
//private FlexboxLay↕₩outManager flexboxLayoutManager;
pri&§☆vate Context mContext;
public Fragme♠π© ntOne(Context mContext) {
₽€→♦ this.mContext = mContext;
}
@≥&Override
protected void initVie$w(View rootView) {
rv_Fle' xbox = (RecyclerView)rootView.findViewById(¶₩R.id.rv_Flexbox);
FlexboxLayoutManage'₽r flexboxLayoutManager =Ω; new FlexboxLayoutManager(mContext);
☆↕$ //flexDirection 屬性決定主軸的(de)方向(""©φ即項目的(de)排列方向)。類似 Linea →δrLayout 的(de) vertical 和(hé) horizontal。
£β↕ flexboxLayoutManager.setFlexDirection(FlexDi♠¶£rection.ROW);//主軸為(wèi)水(shuǐ)平方向,∞∏;起點在左端。
//flexWrap 默認情況下(xià) Flex 跟 L¶λ₽inearLayout 一(yī)樣,都(dōu)是(&← shì)不(bù)帶換行(xíng)排列的(de)ÿ≠±&♦0c;但(dàn)是(shì)flexWrap屬性可(kě)以支持換行(xíng$←±)排列。
flexboxLayoutManager.setFlexWrap(Fl¶α®exWrap.WRAP);//按正常方向換行(xíng)
//justifyCon♠™↓tent 屬性定義了(le)項目在主軸上(shàng)的(de)對(duì ♠✘)齊方式。
flexboxLayoutMana ₩ ger.setJustifyContent(JustifyContent.FLE≤≈©&X_START);//交叉軸的(de)起點對(duì)齊。
£♦rv_Flexbox.setLayoutManager(flexboxLayoutMa♥₽nager);
list_data = new ArrayList&l♦©$£t;>();
fAdapter &≠∑#61; new FlexBoxAdapter(getActivity(),list ≈™_data);
rv_Flexbox.setAdapter(fAdapt☆er);
fAdapter.setOnItemCli <↓←ckLitener(new FlexBoxAdapter£∑§.OnItemClickLitener() {
@Overrid≈φe
public void ¥rel="stylesheet">