要查看哪个构造函数?

我从View扩展了我的自定义视图。 有3个视图构造函数:

  1. View(Context context, AttributeSet attrs, int defStyle)
  2. View(Context context, AttributeSet attrs)
  3. View(Context context)

从我的活动我调用std.setContentView(R.layout.main) 。 第二个构造函数在我的视图中被调用。 为什么第二个? 如何提前知道哪一个将被调用以及为什么?

Solutions Collecting From Web of "要查看哪个构造函数?"

来自Android开发者网站的View文档:

public View (Context context)

从代码创建视图时使用的简单构造函数。

因此,您可以使用此构造函数在Java中创建View。 从XML扩充时不会调用它。

public View (Context context, AttributeSet attrs)

从XML扩展视图时调用的构造方法。 在从XML文件构造视图时调用此方法,从而提供在XML文件中指定的属性。 此版本使用默认样式0,因此应用的唯一属性值是Context主题和给定AttributeSet中的属性值。

添加完所有子项后,将调用onFinishInflate()方法。

因此,当您未指定样式时,在从XML扩展View时将调用此构造函数。

public View (Context context, AttributeSet attrs, int defStyle)

从XML执行通胀并应用特定于类的基本样式。 View的这个构造函数允许子类在膨胀时使用它们自己的基本样式。 例如,Button类的构造函数将调用此版本的超类构造函数,并为defStyle提供R.attr.buttonStyle; 这允许主题的按钮样式修改所有基本视图属性(特别是其背景)以及Button类的属性。

您应该实现所有这些构造函数,但是您可以通过分别为前两个调用this(context, null)this(context, attrs, 0)来将所有工作放在第三个构造函数中。