android View的三个构造方法 简单总结


在android开发中,我们经常会涉及到自定义View,View有3个构造方法(可能以后会更多),如下:

public CircleView(Context context) {
	this(context,null);
}

public CircleView(Context context, AttributeSet attrs) {
	this(context,attrs,R.attr.customViewStyle);
}
public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
	super(context, attrs, defStyleAttr);
	//初始化属性
        TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.customView,defStyleAttr,0);
        circleWidth=array.getDimensionPixelSize(R.styleable.circleView_circleWidth,DEFALUT_CIRCLE_WIDTH);
	array.recycle();
	init();
}


第一个构造方法是提供给我们在代码中生成控件使用的,第二个方法是在XML布局文件中插入控件使用的,其中attrs参数就是我们在XML中定义控件的属性(包含自定义的属性),其实第二个构造函数也是调用第三个构造函数,这里我在第三个参数传入R.attr.customViewStyle,第三个方法的第三个参数defStyleAttr的意义是从APP或者Activity的Theme中设置的该控件的属性的默认值,如下:

这是我再attrs文件中定义的属性,也就是上面构造方法中传入的参数

<attr name="customViewStyle" format="reference" />

然后我们需要在App 或者Activity的Theme中设置它的值

 <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="customViewStyle">@style/custom_view_style</item>
 </style>

其中的custom_view_style

<style name="custom_view_style">
       <item name="circleWidth">8dp</item>
</style>
这样当你的XML文件中没有给该控件的circleWidth定义值的时候,默认值就是8dp。

注意:

TypedArray array=context.obtainStyledAttributes(set, attrs, defStyleAttr, defStyleRes);

该方法的第四个参数defStyleRes,可以直接传入自定义的style,如果defStyleAttr为0,defStyleRes才会起作用。

android控件获取属性值的优先顺序:

1.在XMl文件中直接定义;

2.在XMl文件引用的style;

3.就是从如上所说的defStyleAttr中取值;

4.从defStyleRes取值;

5.从Activity或者Application的Theme中取值;






  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值