//簡單優化之後的
public class flowlayout extends viewgroup
public flowlayout(context context, attributeset attrs)
public flowlayout(context context, attributeset attrs, int defstyleattr)
@override
protected void onlayout(boolean changed, int l, int t, int r, int b)
});marginlayoutparams lp = (marginlayoutparams) child
.getlayoutparams();
int childwidth = child.getmeasuredwidth();
int childheight = child.getmeasuredheight();
// 如果已經需要換行
if (childwidth + lp.leftmargin + lp.rightmargin + linewidth > width)
/*** 如果不需要換行,則累加
*/linewidth += childwidth + lp.leftmargin + lp.rightmargin;
lineheight = math.max(lineheight, childheight + lp.topmargin
+ lp.bottommargin);
lineviews.add(child);
}// 記錄最後一行
mlineheight.add(lineheight);
mallviews.add(lineviews);
int left = 0;
int top = 0;
// 得到總行數
int linenums = mallviews.size();
for (int i = 0; i < linenums; i++)
marginlayoutparams lp = (marginlayoutparams) child
.getlayoutparams();
//計算childview的left,top,right,bottom
int lc = left + lp.leftmargin;
int tc = top + lp.topmargin;
int rc =lc + child.getmeasuredwidth();
int bc = tc + child.getmeasuredheight();
child.layout(lc, tc, rc, bc);
left += child.getmeasuredwidth() + lp.rightmargin
+ lp.leftmargin;
}left = 0;
top += lineheight;}}
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else
// 否則累加值linewidth,lineheight取最大高度
// 如果是最後乙個,則將當前記錄的最大寬度和當前linewidth做比較
if (i == ccount - 1)
}setmeasureddimension((modewidth == measurespec.exactly) ? sizewidth
: width, (modeheight == measurespec.exactly) ? sizeheight
: height);
}/**
* 儲存所有的view,按行記錄
*/private list> mallviews = new arraylist>();
/*** 記錄每一行的最大高度
*/private listmlineheight = new arraylist();
/*** 與當前viewgroup對應的layoutparams
*/@override
public layoutparams generatelayoutparams(attributeset attrs)
}
//沒有優化的
public class mygroupview extends viewgroup
public mygroupview(context context, attributeset attrs)
public mygroupview(context context, attributeset attrs, int defstyleattr)
@override
public viewgroup.layoutparams generatelayoutparams(attributeset attrs)
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
@override
protected void onlayout(boolean b, int i, int i1, int i2, int i3)
});if (tw + child.getwidth() < width) else
child.layout(tw, th, tw + child.getmeasuredwidth(), th + child.getmeasuredheight());
tw += child.getmeasuredwidth();}}
}
//賦值
fl= findviewbyid(r.id.fl);
viewgroup.marginlayoutparams lp = new viewgroup.marginlayoutparams(viewgroup.layoutparams.wrap_content, viewgroup.layoutparams.wrap_content);
lp.leftmargin = 5;
lp.rightmargin = 5;
lp.topmargin = 5;
lp.bottommargin = 5;
for(int i = 0; i < list.size(); i ++)
FlowLayout 自定義布局
在本次,我們延續qt 7 的學習,再次對layout的繼承進行學習。參考在此之前,我們對qt編譯中碰到的一些問題進行記錄 問題1 編譯中出現make g 沒有找到 對於ubuntu可以使用apt get install g 但是在採用yum的系統,例如meego,沒有g 的包,yum那裡採用了另外的...
布局管理 流式布局
2007 11 16 14 18 使用流式布局管理器時,gui元件將按照新增入容器的順序自左而右排列在一行上,如果一行空間不足,則另起一行。預設情況下,元件是劇中排列的。可以通過改變面板的預設布局管理器來改變元件在每一行上的排列位置。語句示例如下 flowlayout fl new flowlayo...
網頁布局流式布局
工具所用到外掛程式 masonry 是 一款非常強大的jquery動態網格布局外掛程式,可以幫助開發人員快速開發類似剪貼畫的介面效果。和css中float的效果不太一樣的地方在 於,float先水平排列,然後再垂直排列,使用masonry則垂直排列元素,然後將下乙個元素放置到網格中的下乙個開發區域。...