转 android view构造函数研究

上周遇到了SurfaceView的constructor的问题,周末决定略微细致地研究一下这个令人发指的玩意。

  SurfaceView是View的子类,与View一样有三个constructor:

1 public void CustomView(Context context) {}
2 public void CustomView(Context context, AttributeSet attrs) {}
3 public void CustomView(Context context, AttributeSet attrs, int defStyle) {}

  为了方便,我们分别命名为C1,C2,C3。
  C1是最简单的一个,如果你只打算用code动态创建一个view而不使用布局文件xml inflate,那么实现C1就可以了。
  C2多了一个AttributeSet类型的参数,在通过布局文件xml创建一个view时,这个参数会将xml里设定的属性传递给构造函数。如果你采用xml inflate的方法却没有在code里实现C2,那么运行时就会报错。但是由于编译能顺利通过,对于我这样的菜鸟,这个错误有时不太容易被发现。
  关于C1和C2,google和度娘上都有很多文章介绍,我就不做赘述。

  扯淡的是C3。
  C3多了一个defStyle的int参数,关于这个参数doc里是这样描述的:

  The default style to apply to this view. If 0, no style will be applied (beyond what is included in the theme). This may either be an attribute resource, whose value will be retrieved from the current theme, or an explicit style resource.

  从字面上翻译,这个参数似乎是用来指定view的默认style的,如果是0,那么将不会应用任何默认(或者叫缺省)的style。另外这个参数可以是一个属性指定的style引用,也可以直接是一个显式的style资源。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值