自定義View 初始化的時候有三個構造方法:
public class MyCustomView extends View {
/**
* 第一個構造函數
*/
public MyCustomView(Context context) {
this(context, null);
}
/**
* 第二個構造函數
*/
public MyCustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/**
* 第三個構造函數
*/
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO:獲取自定義屬性
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
網上有很多關於三個構造函數的使用時機的說法,現在總結一下:
1,在代碼中直接new一個實例的時候,會調用第一個構造函數。
2,在xml佈局文件調用的時候,會調用第二個構造函數。
3,在xml佈局文件中調用,並且標籤中還有自定義屬性時,這裏調用的還是第二個構造函數。
也就是說,系統默認只會調用前兩個構造函數,至於第三個構造函數的調用,通常是我們在構造函數中主動調用的。(例如,在第二個構造函數中調用第三個構造函數)
在前兩個構造函數裏面需要添加新的參數,第一個後面多加一個null 第二個多加一個0 是另外一種構造方法,之後的文章會解釋,之前理解錯了.