要查看哪个构造函数?

我从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) 。 第二个构造函数在我的视图中被调用。 为什么第二个? 如何提前知道哪一个将被调用以及为什么?

  • 如何在android中使网格视图水平滚动
  • android weightSum无法正常工作
  • 如何在editText字段上更改突出显示颜色
  • 奇怪的问题与android:ellipsize =“结束”
  • java.lang.StackOverFlow错误。 怀疑太多意见?
  • 将图像的顶部alignment到TextView的顶部
  • 如何在相关度量中指定Android GridLayout单元格的宽度和高度?
  • 无法将@ drawable /转换为drawable
  • 来自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)来将所有工作放在第三个构造函数中。