android 中View对象的创建可以在代码中创建,也可以在布局文件中声明,在布局文件中声明时,可以对在布局文件中添加属性,如: android:layout_width="fill_parent" 。属性包括两个部分:android和layout_width,android是命名空间,layout_width是属性名,我们可以在View上添加任意不带前缀的属性如:<View android:layout_width="44dip" android:layout_height="0dip" anyproperty="value" />, 上面的代码不会报任何的错误,但是这样做并没有任何的实际意义。

View中要想自己生命的属性有意义,则需要为属性加一个命名空间前缀,在布局文件中直接给View加前缀是不允许的,如:<Button myxmlns:anyproperty="value" /> 这样的代码在IDE中会直接报错,并提示无该命名空间,要想使得该命名空间有效,则需要在使用该命名空间之前生命该命名空间,方式如下:

<View xmlns:myxmlns="ssss" />

有了如上的生命,我们就可以有如下的代码而使得IDE不会报告任何错误:<View xmlns:myxmlns="sss" myxmlns:anyproperty="value" />

在实际应用中大多数的自定义命名空间都声明在第一个元素中,如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:myxmlns="ssss"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

ss="" />

<View    myxmlns:sss="sss" />

</LinearLayout>

但这些声明不会使得IDE报错,但其实也是没有任何意义的。因为这里的命名空间的值sss是任意定义的,我们要使得它看起来有意义,我们一般使用如下的值xmlns:myxmlns=""http://schemas.android.com/apk/res/<你的应用程序的包名>",同时我们还需要在values目录下创建一个attrs.xml的文件,文件的内容看起来像这样的:

<resources>

<declare-styleable name="LabelView">

<attr name="text" format="string" />

<attr name="textColor" format="color" />

</declare-styleable>

</resources>

这时如果你使用以下的布局文件IDE就会报错了

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:myxmlns="http://schemas.android.com/apk/res/com.zbkc.custumview"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TextView  android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"    />

<View myxmlns:sss="sss" />

</LinearLayout>

他会在 <View myxmlns:sss="ssss" />这一行提示myxmlns的命名空间下sss这个属性

但我们可以使用如下的布局文件而不会报错:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:myxmlns="http://schemas.android.com/apk/res/com.zbkc.custumview"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TextView  android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"    />

<View myxmlns:text="sss"

myxmlns:textColor="#ffffffff"/>

</LinearLayout>

因为text和textColor属性在前面的布局文件中已经被声明。

实际上给任何android自带的控件增加自定义属性都是无意义的做法,但对于自定义的View(继承自View的类)来增加自定义的属性却是有很大的实际意义的,如,我们可能经常看到有如下的声明:

<MyView android:layout_width="fill_parent"

android:layout_height="fill_parent"

myxmlns:anyproperty="value" />

这就是为自定义的View添加了额外的属性,但是刚有了我们前面的声明,并没有什么实际的意义,因为只是做到了声明IDE不报错,并没有任何实际的意义,我们现在要做的就是如何在自定义的View中(注意,只能在自定义的View中来取得这些值)取得我们在布局文件中声明的属性值。

我们下面来写一个稍微完整一点的代码来演示一下完整的过程:

java代码

class LabelView extends View {

private String text;

private int textColor;

public LabelView(Context context, AttributeSet attrs) {

super(context, attrs);

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LabelView);

text = (String)a.getText(R.styleable.LabelView_text);

textColor = a.getColor(R.styleable.LabelView_textColor, 0xff000000);

Log.i("test", "text:" + text);

Log.i("test", "textColor:" + textColor);

a.recycle();

}

}

Xml声明

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:myxmlns="http://schemas.android.com/apk/res/com.zbkc.custumview"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<com.zbkc.custumview.LabelView

android:layout_width="fill_parent"

android:layout_height="fill_parent"

myxmlns:text="sss"

myxmlns:textColor="#ff00ff00" />

</LinearLayout>

我们另外再加一个入口代码就可以发现可以取得我们自定义声明的值了

转载于:https://www.cnblogs.com/zijianlu/archive/2012/05/30/2526037.html

Android 自定义View自定义属性的声明相关推荐

  1. Android自定义view详解,使用实例,自定义属性,贝塞尔曲线

    //只会触发执行onDraw方法,只会改变绘制里面的内容,条目的绘制 invalidate(); //只会触发执行onDraw方法,但是可以在子线程中刷新 postInvalidate(); //vi ...

  2. 精通Android自定义View(五)自定义属性值使用详情

    1 可查看Android自定义View的基本使用 1 精通Android自定义View(一)自定义控的基本使用 2 精通Android自定义View(二)自定义属性使用详解 2 string 字符串 ...

  3. android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性

    android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...

  4. 精通Android自定义View(十二)绘制圆形进度条

    1 绘图基础简析 1 精通Android自定义View(一)View的绘制流程简述 2 精通Android自定义View(二)View绘制三部曲 3 精通Android自定义View(三)View绘制 ...

  5. android自定义View学习(一)----创建一个视图类

    创建一个视图类 精心设计的自定义视图与其他精心设计的类非常相似.它使用易于使用的界面封装了一组特定的功能,它可以高效地使用CPU和内存,等等.不过,作为一个设计良好的班级,自定义视图应该: 符合And ...

  6. Android 自定义View

    [Android 自定义View] Android 自定义View 自定义View基础 自定义TextView 继承View重写onDraw方法 View的构造方法 自定义属性 创建attrsxml文 ...

  7. Android自定义View实现三角到八角的属性分布图-雷达图(蜘蛛网图)

    Android自定义View实现三角到八角的属性分布图-雷达图(蜘蛛网图) 前言 自定义View的关键点 绘制多边形 结尾 前言 刚开始学习自定义view,简单完成了一个属性分布器,可以实现三条到八条 ...

  8. Android自定义View之画圆环(进阶篇:圆形进度条)

    前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...

  9. Android自定义View精品(CustomCalendar-定制日历控件)

    版权声明:本文为openXu原创文章[openXu的博客],未经博主允许不得以任何形式转载 目录: 文章目录 1.分析 2.自定义属性 3.onMeasure() 4.onDraw() ①.绘制月份 ...

最新文章

  1. C#游戏开发快速入门 2.1 构建游戏场景
  2. mysql自动备份脚本,及系统定时备份设置!
  3. 理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
  4. tornado框架基础11-tornado异步
  5. Spark源码分析 -- SchedulableBuilder
  6. 三分钟了解APS系统中生产计划排程模块的基本原理
  7. html 【一个简单的用户登录页面代码】
  8. github安装python包_使用PyCharm从GitHub安装Python包
  9. 使用hightopo完成基本图元旋转和闪烁
  10. 三星s6如何打开位置服务器,三星S6开发者选项在哪里?怎么打开
  11. 服务器装xp系统蓝屏怎么办,安装XP系统出现蓝屏的解决办法
  12. 蓝桥杯2013第四届 第四题39级台阶
  13. 如何选择企业电脑加密软件,知道这几点一定不后悔!
  14. 工作好搭档(四):铷安居 H-C81 电脑桌
  15. 应用ast抽象语法树修改js函数
  16. GetLastError
  17. OSGi 规范和框架 OSGi框架类加载机制 Java默认类加载器机制和OSGI类加载器机制比较
  18. 数字图像处理第四版冈萨雷斯
  19. 免费、付费换IP大集合,你要的这都有【芝麻http】
  20. QQ空间打不开解决办法!

热门文章

  1. excel制作跨职能流程图_用Excel规划求解工具,实现组合投资优化
  2. PL/SQL Developer 更改字体
  3. shell中的文本处理(grep、sed、awk命令)
  4. 后端用的nodejs怎么打包_你怎么也想象不到,平板玻璃、玻璃瓶这些竟可以用PET塑钢带打包!...
  5. 当前以太坊上DeFi协议总锁仓量为374.7亿美元
  6. 箱包品牌Rimowa成为Vidy广告商,在Vogue新加坡使用VidyCoin购买广告业务
  7. SAP License:SAP中的容差
  8. 2021当一名优雅的代码打工人
  9. web端项目管理/工程项目劳务资源管理系统/考勤审批/人员招聘/企业管理系统/工资管理/入职管理/组织结构/财务管理/大数据指挥中心/劳务系统/岗位工种/智慧工程监管/劳务app原型/axure原型
  10. Python之Django之views中视图代码重复查询的优化