Android 自定義View的構造函數的調用時機

自定義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  是另外一種構造方法,之後的文章會解釋,之前理解錯了.


發佈了104 篇原創文章 · 獲贊 138 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章