自定義ViewGroup及其屬性

2021-07-10 18:57:35 字數 1489 閱讀 4191

閒來無事自定義個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...