好文章 保存下分享:http://www.android123.com.cn/androidkaifa/591.html对于Android系统的自定义View可能大家都熟悉了,对于自定义View的属性添加,以及Android的Layout的命名空间问题,很多网友还不是很清楚,今天Android123一起再带大家温习一下CwjView myView=new CwjView(context);如果用于游戏或整个窗体的界面,我们可能直接在onCreate中setContentView(myView); 当然如果是控件,我们可能会需要从Layout的xml中声明,比如<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"
/>上面我们仅用了父类View的两个属性,均来自android命名空间,而名称为layout_width或layout_height,我们自定义的控件可能有更多的功能,比如 <cn.com.android123.CwjView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
cwj:age="22"
cwj:university="sjtu"
cwj:city="shanghai"
/> 我们可以看到上面的三个属性,是我们自定义的。作为标准xml规范,可能还包含了类似 xmlns:android="http://schemas.android.com/apk/res/android"这样的语句,对于定义完整的View,我们的命名空间为cwj,这里可以写为 xmlns:cwj=http://schemas.android.com/apk/res/cn.com.android123.cwjView 或 xmlns:cwj=http://schemas.android.com/apk/res/android都可以。对于定义的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>这里我们可能对format不是很熟悉,目前Android系统内置的格式类型有integer比如ProgressBar的进度值,float比如RatingBar的值可能是3.5颗星,boolean比如ToggleButton的是否勾选,string比如TextView的text属性,当然除了我们常见的基础类型外,Android的属性还有特殊的比如color是用于颜色属性的,可以识别为#FF0000等类型,当然还有dimension的尺寸类型,比如23dip,15px,18sp的长度单位,还有一种特殊的为reference,一般用于引用@+id/cwj @drawable/xxx这样的类型。当然什么时候用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提示大家不要忘了回收资源 } 这样类的全局成员变量 mAge、mCity就获取了我们需要的内容,当然根据layout中的数值我们自定义的CwjView需要动态的处理一些数据的情况,可以使用AttributeSet类的getAttributeResourceValue方法获取。 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就可以任意使用了

更多相关文章

  1. Android自定义Layout
  2. 【Android(安卓)进阶】Iconfont 图标的使用以及自定义
  3. Android(安卓)ApiDemos示例解析(107):Views->Controls->1. Light
  4. You cannot combine custom titles with other title feature
  5. eclipse导入android工程@override报错
  6. 自定义EditText
  7. Android(安卓)浏览器设置中的搜索引擎
  8. android 网络连接 大体走向
  9. android自定义dialog,软件键盘弹出挡住输入区域解决

随机推荐

  1. Android NDK介绍
  2. Android SDK Samples,学习Android的好方法
  3. android中Webview与javascript的交互(互相
  4. Android通过WebView实现office文档在线预
  5. Android利用ant将多个jar包合并成一个jar
  6. 项目总结
  7. Android基础和运行机制
  8. android usb主从设备模式解析,网络连接调
  9. Android ADB安装和卸载或删除Android设备
  10. Android应用程序及其主要结构