自定義控制項

2021-07-10 18:27:46 字數 2518 閱讀 3563

實際上的自定義控制項很多種型別,但現在基本上非原生控制項都叫做自定義控制項,那麼今天就來研究研究自定義控制項到底是個啥。

這裡的分類是依照實現方式進行的。自定義控制項可以分為以下幾種型別:

一、繼承原生控制項的view

簡單重寫其中方法

改變控制項布局

二、繼承原生布局的viewgroup

修改其中的方法

修改控制項布局

設定指定子view

自定義控制項種類繁多,實現方式也是各種各樣,也正是因為多樣化的設計才讓android的控制項永遠不乏新意。(只有你想不到,沒有我做的到( ̄ε(# ̄)☆╰╮( ̄▽ ̄///))

關於自定義控制項最重要的就是三個方法,也就是傳說中的onmeashure()、onlayout()、ondraw()

別的不扯,自定義控制項所需要的基本設定有哪些,具體研究一下,這一點很重要:

1.繼承view它的子類(包括viewgroup)

說要自定義控制項,總歸來說做的還是乙個控制項,所以還是要做繼承,只是做個自定義view,總不至於連view都自己寫。

完成繼承以後,根據所要做的自定義view不同,那麼要進行的工作也就不一樣了,一般來說,盡量繼承與自定義控制項結構相似的已有控制項,這也是為了減少工作量。舉個例子,想要做乙個很酷炫的文字輸入框,那直接繼承edittext就好,要什麼效果再做具體修改。沒必要從繼承view開始,那樣會毀滅世界的。(沒那麼誇張,當時真的沒那個必要)

2.做自定義內容設定

這一步就要分為兩種種情況了,分開兩種講:

1.複寫構造方法

//這個是用來初始化控制項的

/**打個比方**/

public

class

customerview

extends

view

public

customerview (context context, attributeset attrs)

public

customerview (context context)

}

2.重寫onmeasure()方法

這個方法是用來控制控制項的寬高值的

protected

void

onmeasure(int widthmeasurespec, int heightmeasurespec)

3.重寫ondraw()方法

我知道onlayout()方法不見了,但是我真的沒吃它,事實上,view是不存在onlayout()方法的,原因是onlayout()用來控制控制項中的布局,但是view中是不存在子view的(單身控(#‵′)凸),因此直接完成ondraw()方法基本就能搞定這個自定義控制項了。

protected

void

ondraw(canvas canvas)

4.完善工作

自定義控制項畢竟不是只用來看的,不然請ui切份圖給我們就好了,還寫一大塊的**幹嘛,需要宣告控制項中的各種各樣七七八八的功能都能在裡面完成,提供給應用使用,還能在裡面新增觀察者,說到觀察者,有興趣可以移步也是我寫的,可以交流一下

但是!! 不得不說,當需要高個性化的控制項,這種方法真的就沒什麼用處了,還是需要使用第一種方式。

說完了繼承view的情況,還有一種繼承viewgroup的情況

1.繼承viewgroup

選擇乙個與需求最為匹配的布局作為父類,能夠幫助快速方便的完成自定義控制項的設計。

2.根據需求選擇完成方式:

首先是有指定布局樣式

//通過這句**將指定的布局新增到viewgroup中,這裡的viewgroup就應該是this

view.inflate(context,layout,viewgroup);

完成了這個步驟,接下來有其他的需要就可以編寫其他的方法進行控制項的操作。

另乙個是修改原布局功能

這其實是乙個小部分的方法重寫,實現也很簡單,一般我用來處理事件傳遞方法。

再乙個就是有自行繪製需求

這一點中onmeasure()和ondraw()參考view的繼承就行,基本上是一樣的,這裡講一下onlayout()。

這個方法是用來設定子view的擺放的,也就是說viewgroup中放置view的位置可以由這個方法完成。

protected

abstract

void

onlayout(boolean changed,int l,int t,int r,int b)

基本簡單的自定義控制項完成方法都介紹完了,事實上還有很多詳細的實現方法以及其他的實現方式,在這片文章裡就不做介紹了。

自定義控制項 自定義鐘錶

private context mcontext 畫筆 private paint mpaint 控制項的寬 private int mwidth x方向的圓心座標 private int center 鐘錶的半徑 private int mradio 圓環的寬 private int stroke...

自定義控制項

首先是以下這幾項,attribute defaultproperty指定元件的預設屬性,toolboxdata指定當從ide工具中的 工具箱中拖動自定義控制項時為它生成的預設標記 defaultproperty text toolboxdata mycontrol runat server 上面這些...

自定義控制項

新聞管理 using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web.ui.webcontrols namespace ne...