public DrawView(Context context) { super(context); // TODO Auto-generated constructor stub } public DrawView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public DrawView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub }
View類有三個構造方法,你在繼承時,至少要覆寫其中一個,以便創建你的自定義View。 這三個構造方法分別是一個參數,兩個參數和三個參數的。 一個參數的:在自己new對象建立此View時調用,也就是上面的new DrawView(this)這種。 二個參數的:在xml中聲明自定義View時調用,就是在main.xml裏聲明瞭<xx.xx.DrawView>這種 三個參數的:也是在XML中聲明自定義View時調用,但與兩個參數的區別是這個加入了Style樣式的引用,也就是說,如果你的 main.xml裏<xx.xx.DrawView>中加入了style="@style/xxx.xml",就會調用這個三參的方法。 綜合以上所說的,如果三個構造方法都覆寫,那麼你的自定義View怎麼建立都行。 如果只想通過java程序代碼建立,那麼只需要覆寫一個參數的。 如果只想通過XML建立,那麼需要覆寫兩個參數的,如果XML建立還想帶樣式,那麼就必須同時覆寫三個參數的構造方法了。
android5.0系統之後,又添加了一個四個參數的構造函數
public DrawView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); // TODO Auto-generated constructor stub }