第二次遇到这个问题:
构造函数:
<pre name="code" class="java">public CalendarView(Context context) {
super(context);
}
解决办法是添加构造函数:
public CalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
}
这两个构造函数有什么不同:
1. View (Context context)
/**
* Simple constructor to use when creating a view from code.
*
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
*/
public View(Context context) {
在代码中新建一个View时调用的简单构造函数。
2. View (Context context, AttributeSet attrs)
/**
* Constructor that is called when inflating a view from XML. This is called
* when a view is being constructed from an XML file, supplying attributes
* that were specified in the XML file. This version uses a default style of
* 0, so the only attribute values applied are those in the Context's Theme
* and the given AttributeSet.
*
* <p>
* The method onFinishInflate() will be called after all children have been
* added.
*
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
* @param attrs The attributes of the XML tag that is inflating the view.
* @see #View(Context, AttributeSet, int)
*/
public View(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
通过XML文件填充View时调用的构造函数,XML文件中的所有子View添加结束后调用View的onFinishInflate()函数。
顺便来看一下View的第三个构造函数:
/**
* Perform inflation from XML and apply a class-specific base style. This
* constructor of View allows subclasses to use their own base style when
* they are inflating. For example, a Button class's constructor would call
* this version of the super class constructor and supply
* <code>R.attr.buttonStyle</code> for <var>defStyle</var>; this allows
* the theme's button style to modify all of the base view attributes (in
* particular its background) as well as the Button class's attributes.
*
* @param context The Context the view is running in, through which it can
* access the current theme, resources, etc.
* @param attrs The attributes of the XML tag that is inflating the view.
* @param defStyleAttr An attribute in the current theme that contains a
* reference to a style resource to apply to this view. If 0, no
* default style will be applied.
* @see #View(Context, AttributeSet)
*/
public View(Context context, AttributeSet attrs, int defStyleAttr) {
this(context);
通过XML文件填充View,并应用指定的base style.