View在5.0以上,有四个构造函数(分别带1 2 3 4个参数)
1、第二个内部调用第三个,第三个又调用第四个,最后第四个内部又调用第一个,形成了一个链
2、而View的子类四个函数调用关系:第一个调用第二个,第二个调用第三个,第三个调用第四个,而第四个则调用父类的第四个构造函数super(context, attrs, defStyleAttr, defStyleRes);
3、例如ViewGroup: 第一个调用第二个,第二个调用第三个,第三个调用第四个,而第四个则调用View的第四个,View的第四个内部则调用了View的第一个
View:
public View(Context context) {
....
}
public View(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
this(context);
....
}
而ViewGroup:
publicViewGroup(Context context) {
this(context, null);
}
publicViewGroup(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
publicViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
publicViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initViewGroup();
initFromAttributes(context, attrs, defStyleAttr, defStyleRes);
}