閒來無事自定義個viewgroup的控制項來練練手。
比如說現在有這麼個需求,一左一右分別有個textview,然後外面乙個控制項直接包裹這兩個;
1:現在給這個自定義控制項(本文中名叫rclinearlayout)自定義乙個屬性,然後去通過這個屬性去確定這兩個textview是否需要處於同一水平線上。
①先建立values資料夾下的attrs.xml檔案,如:
<?xml version="1.0" encoding="utf-8"?>
當然了,你還可以增加別的屬性,然後根據你設的屬性去確定child的位置
2.重要的地方來了,就是自定義控制項了,主要是重寫onmeasure方法和onlayout方法,onmeasure方法主要是測量出容器的寬與高,而onlayout方法則是確定child的位置,**如下:
public class rclinearlayout extends viewgroup
public rclinearlayout(context context, attributeset attrs)
public rclinearlayout(context context, attributeset attrs, int defstyleattr)
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else
}//高取兩個childview的取大值
height = math.max(lheight,rheight);
width = twidth;
/*** 如果是wrap_content設定為我們計算的值
* 否則:直接設定為父容器計算的值
*/setmeasureddimension((widthmode == measurespec.exactly) ? sizewidth : width,
(heightmode == measurespec.exactly) ? sizeheight : height);
}@override
protected void onlayout(boolean changed, int l, int t, int r, int b)
}else
switch (i)
cr = cl + cwidth;
cb = cheight + ct;
childview.layout(cl, ct, cr, cb);}}
@override
public viewgroup.layoutparams generatelayoutparams(attributeset attrs)
}
3.接下來是在布局檔案中使用了<?xml version="1.0" encoding="utf-8"?>
嗯,基本上就這麼多了。 自定義ViewGroup(一)
1 概述 viewgroup是乙個view的容器,他可以給出childview的測量模式和測量其寬高,他的作用非常重要。childview測量模式 exactly 表示設定了精確的值,一般當childview設定其寬 高為精確值 match parent時,viewgroup會將其設定為exactl...
ViewGroup 自定義控制項
自定義viewgroup這篇文章是針對自定義layoutmanager來寫的,提取出相關自定義的相同點。所有的自定義都可以歸結為在父控制項裡面放置子控制項。一 繼承類 viewgroup 繼承之後需要實現構造,由於一般是在xml中引入所有需要實現以下構造 viewgroup context cont...
自定義ViewGroup 回顧
自定viewgroup要比自定義view要複雜一點,因為自定義viewgroup不僅測量自身還要測量子元素和及重寫onlayout 來一次排列子view。下面這篇文章是關於自定義viewgroup的一些基本知識,這些主要內容來自 android開發藝術探索 在文章最後又這本書的網上版本。viewgr...