[Android] 自定義 view

前言

Android開發中,對於自定義 View widget分為兩種

  • 自定義widget (繼承 View class)
    需重載兩個操作widget的方法,一個是用來測量尺寸的onMeasure()另一個是用來繪製UI的onDraw()

  • 自定義佈局容器 (繼承 ViewGroup)
    需重載三個操作widget的方法,一個是用來測量尺寸的onMeasure(),一個是用佈局子部件的onLayout()以及繪製UI的dispatchDraw()

Android View和ViewGroup從組成架構上看,似乎ViewGroup在View之上,View需要繼承ViewGroup,但實際上不是這樣的。View是基類,ViewGroup是它的子類。這就證明了一點,View代表了用戶界面組件的一塊可繪製的空間塊。每一個View在屏幕上佔據一個長方形區域。在這個區域內,這個VIEW對象負責圖形繪製和事件處理。View是小控件widgets和ViewGroup的父類。ViewGroup又是Layout的基類。

ViewGroup的onLayout()方法

由於ViewGroup的定位就是一個容器,用來盛放子部件的,所以就必須定義要以什麼的方式來盛放,比如LinearLayout就是以橫向或者縱向順序存放,而RelativeLayout則以相對位置來擺放子控件,同樣,我們的自定義ViewGroup也必須給出我們期望的佈局方式,而這個定義就通過onLayout()函數來實現。

參考來源
  1. Android開發實踐:自定義ViewGroup的onLayout()分析- 對影成三人- 51CTO技術博客
  2. 2.1 Android界面View及ViewGroup - 棕櫚燒酒- 51CTO技術博客