在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文件中定义的属性,也就是上面构造方法中传入的参数

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

 

其中的custom_view_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. android线程相关1
  2. Android控件开发之Gallery
  3. Android抓包方法
  4. Android(安卓)Widget开发
  5. okhttp源码学习分析一
  6. Android处理EditText键盘自动隐藏
  7. Android开发经验总结
  8. Android倒计时实现
  9. android dialog 背景透明的样式

随机推荐

  1. Android(安卓)JSON,Gson,fastjson实现比
  2. [Android] android:scaleType详解
  3. How Android(安卓)Draws Views
  4. android 打电话 发送短信
  5. Layout1.9
  6. android图片放大 缩小 旋转
  7. Android(安卓)查看本机外网IP
  8. 在Android上使用XML
  9. android系统长按的定义
  10. AndroidMenifest.xml(Android清单文件)内