之前遇到需要用自動換行的流布局來實現推薦標籤的功能,當時為這個問題弄得焦頭爛額,找了好多**都沒能完美解決這個問題,不過最終還是搞定了。
我想要實現的就是這種效果,最開始是用的linearlayout布局,但發現當標籤過多時沒辦法自動換行,沒辦法只能自定義控制項來實現了。
下面直接上**
public class flowlayout extends viewgroup
public flowlayout(context context, attributeset attrs)
public flowlayout(context context)
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else
// 未換行
// 最後乙個控制項
if (i == ccount - 1)
} log.e("tag", "sizewidth = " + sizewidth);
log.e("tag", "sizeheight = " + sizeheight);
setmeasureddimension(
//modewidth == measurespec.exactly ? sizewidth : width
+ getpaddingleft() + getpaddingright(),
modeheight == measurespec.exactly ? sizeheight : height
+ getpaddingtop() + getpaddingbottom()//
);} /**
* 儲存所有的view
*/private list> mallviews = new arraylist>();
/*** 每一行的高度
*/private listmlineheight = new arraylist();
@override
protected void onlayout(boolean changed, int l, int t, int r, int b)
linewidth += childwidth + lp.leftmargin + lp.rightmargin;
lineheight = math.max(lineheight, childheight + lp.topmargin
+ lp.bottommargin);
lineviews.add(child);
}// for end
// 處理最後一行
mlineheight.add(lineheight);
mallviews.add(lineviews);
// 設定子view的位置
int left = getpaddingleft();
int top = getpaddingtop();
// 行數
int linenum = mallviews.size();
for (int i = 0; i < linenum; i++)
marginlayoutparams lp = (marginlayoutparams) child
.getlayoutparams();
int lc = left + lp.leftmargin;
int tc = top + lp.topmargin;
int rc = lc + child.getmeasuredwidth();
int bc = tc + child.getmeasuredheight();
// 為子view進行布局
child.layout(lc, tc, rc, bc);
left += child.getmeasuredwidth() + lp.leftmargin
+ lp.rightmargin;
}left = getpaddingleft();
top += lineheight;
} }/**
* 與當前viewgroup對應的layoutparams
*/@override
public layoutparams generatelayoutparams(attributeset attrs)
}
在我們的專案中使用的時候自然要動態的來新增標籤
private flowlayout type;
type = (flowlayout) findviewbyid(r.id.type);
initdata(basedata.types, type);
private void initdata(string data, flowlayout layout)
}
下面是tv.xml
<?xml version="1.0" encoding="utf-8"?>
這樣就完美實現了乙個自動換行的流布局。 瀑布流布局與自定義瀑布流布局外掛程式
瀑布流布局是網頁中經常採用的一種布局方式,其布局有如下特點 瀑布流布局特點 1 元素按列排放 2 列寬一致,但高度不等 3 布局過程中將優先向高度最小的列補充資料 以下是自定義的乙個jquery瀑布流外掛程式 jquery.mywaterfull.js function arrheight.push...
Android 自定義組合布局
package com.itheima.mobilesafe66.view import android.content.context import android.util.attributeset import android.view.view import android.widget.r...
自定義Toast實現自定義Toast布局
平時我們使用toast的時候都是這樣的一種方法 toast toast toast.maketext context,duration 現在我們來自定義下toast的布局,首先看下toast建立時的源 public static toast maketext context context,char...