http://developer.android.com/guide/topics/ui/custom-components.html#modifying@H_404_2@
描述说:@H_404_2@
Class Initialization As always,the
super is called first. Furthermore,
this is not a default constructor,but
a parameterized one. The EditText is
created with these parameters when it
is inflated from an XML layout file,
thus,our constructor needs to both
take them and pass them to the
superclass constructor as well.@H_404_2@
有更好的描述吗?我一直在努力弄清楚构造函数应该是什么样子,我提出了4种可能的选择(见帖子末尾的示例)。我不知道这4个选择做什么(或不做),为什么我应该实现它们,或什么参数意味着。有这些的描述吗?@H_404_2@
public MyCustomView() { super(); } public MyCustomView(Context context) { super(context); } public MyCustomView(Context context,AttributeSet attrs) { super(context,attrs); } public MyCustomView(Context context,AttributeSet attrs,Map params) { super(context,attrs,params); }
第三个将意味着您的自定义视图将可以从XML布局文件使用。如果你不在乎,你不需要它。@H_404_2@
第四个是错的,AFAIK。没有使用Map作为第三个参数的View构造函数。有一个接受一个int作为第三个参数,用于覆盖小部件的默认样式。@H_404_2@
我倾向于使用this()语法来组合这些:@H_404_2@
public ColorMixer(Context context) { this(context,null); } public ColorMixer(Context context,AttributeSet attrs) { this(context,0); } public ColorMixer(Context context,int defStyle) { super(context,defStyle); // real work here }
你可以在this book example看到这段代码的其余部分。@H_404_2@