自定義控制項《一》

2021-07-30 19:42:18 字數 1657 閱讀 7623

view的工作流主要是指measure、layout、draw,即測量、布局和繪製。

案例:做乙個圓形的控制項

public class circleview extends view 

public circleview(context context, attributeset attrs)

public circleview(context context, attributeset attrs, int defstyleattr)

private void initview()

@override

protected void ondraw(canvas canvas)

}

上述**是自定義的紅色的圓形控制項。但是有兩個問題:

問題一:

兩種布局的效果一樣,都是第一種的match_parent效果,那麼怎樣設定乙個wrap_content效果?

解決方法:

想要解決這個問題,那麼就需要引入measurespec。

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) else if (widthspecmode == measurespec.at_most) else if (heightspecmode == measurespec.at_most)

}

問題二:

怎樣新增自定義屬性,比如新增控制項選擇控制項的顏色。

解決方法:

第一步、在values目錄下建立自定義屬性的xml。

第二步、在view的構造方法中解析自定義屬性的值並做相應處理。

public circleview(context context, attributeset attrs)
第三步、在布局檔案中使用自定義屬性

measurespec理解:

第二個問題的解決很好理解,但是第乙個問題解決方案中的measurespec是什麼東西呢?

measurespec代表乙個32位int值,其中最高的2位代表specmode,後面的30為代表specsize。

乙個measurespec封裝了父布局傳遞給子布局的布局要求,每個measurespec代表了一組寬度和高度的要求,乙個measurespec由大小和模式組成,它有三種模式:

unspecified(未指定):父容器不對view有任何限制,要多大給多大,這種情況一般用於系統內部,表示一種測量狀態。

exactly(完全):父容器已經檢測到view所需要的精確大小,這個時候view的最終大小就是specsize所指定的值。它對應於layoutparams中的match_parent和具體的數值這兩種模式。

at_most(至多):父容器指定了乙個可用大小即specsize,view的的大小不能大於這個值,具體是什麼值要看不同view的具體實現。它對應於layoutparams中的wrap_content。

自定義控制項 一

定義控制項 編寫自己的伺服器控制項從而來補充常用控制項的不足或封裝自己在開發中常用 功能 外觀的控制項 建立自定義控制項 方法一 新建asp.net資料夾 新建類 cs 一般將類設定為public 並指定命名空間 該類 繼承 system.web.ui.webcontrols 或其子類 textbo...

自定義控制項 自定義鐘錶

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 上面這些...