四个构造函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class CustomView extends View {
public CustomView(Context context) { super(context); }
public CustomView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); }
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); }
public CustomView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } }
|
//1 代码中new view时调用;
//2 xml布局中创建view时调用;
//3 //4
前两个比较好理解, 后两个是干什么的呢?
defStyleAttr 和 defStyleRes是干什么的呢?
有些时候我们给控件设置style属性, 可以通过theme或者xml指定style, defStyleAttr就是接收这个style的, defStyleRes我们可以在代码中手动去指定,并且其它地方没有指定style属性的前提下才会defStyleRes指定的style, 中心思想是为了版本的兼容.
属性优先级顺序为:
Xml定义 > xml的style定义 > theme style> defStyleRes> theme直接定义