对于Android系统的自定义View可能大家都熟悉了,对于自定义View的属性添加,以及Android的Layout的命名空间问题,很多网友还不是很清楚,今天Android123一起再带大家温习一下。
- CwjView myView=new CwjView(context);
- <cn.com.android123.CwjView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <View class="cn.com.android123.CwjView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <cn.com.android123.CwjView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- cwj:age="22"
- cwj:university="sjtu"
- cwj:city="shanghai"
- />
对于定义的cwj命名空间和age、university以及city的三个属性我们如何定义呢? 在工程的res/values目录中我们新建一个cwj_attr.xml文件,编码方式为utf-8是一个好习惯,内容如下
- <?xml version="1.0" encoding="utf-8" ?>
- <resources>
- <declare-styleable name="CwjView">
- <attr name="age" format="integer" />
- <attr name="city" format="string" />
- <attr name="university" format="string" />
- </declare-styleable>
- </resources>
当然什么时候用reference呢? 我们就以定义一个颜色为例子,
- <attr name="red" format="color|reference" />
当然,对于我们自定义的类中,我们需要使用一个名为obtainStyledAttributes的方法来获取我们的定义。在我们自定义View的构造方法(Context context, AttributeSet attrs)的重载类型中可以用
- public CwjView(Context context, AttributeSet attrs) {
- super(context, attrs);
- TypedArray a = context.obtainStyledAttributes(attrs,
- R.styleable.cwj_attr);
- mAge = a.getInteger(R.styleable.CwjView_age, 22);
- mCity = a.getString(R.styleable.CwjView_city, "shanghai");
- mUniversity= a.getString(R.styleable.CwjView_university, "sjtu");
-
- a.recycle(); //Android123提示大家不要忘了回收资源
- }
- public CwjView(Context context, AttributeSet attrs)
- {
- super(context, attrs);
- resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "age", 100);
- resId = attrs.getAttributeResourceValue("cn.com.android123.CwjView", "city", "shanghai");
- //resID就可以任意使用了
- }