博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 自定义View并添加属性
阅读量:5056 次
发布时间:2019-06-12

本文共 2710 字,大约阅读时间需要 9 分钟。

本文主要介绍如何为自定义的View添加属性以及属性的类型。代码示例定义见,调用见

1、添加自定义View的属性文件

 

在res/values中新建attrs.xml文件(文件名可另取,不过推荐用attrs.xml,可以将自定义属性都放入其中),内容为

定义名为myViewDefinedAttr的属性列表,这个name命名也可以用下划线形式。name会在下面第二步中使用。

<attr name="attr1" format="boolean"/> 其中name为属性名,format为属性类型,可以为boolean, string, integer, dimension, float, reference, color, fraction, enum, flag及其混合。具体定义及调用方式见本文最后关于自定义属性的介绍。

 

2、自定义View中获取属性值

public class MyView extends View {    private boolean attr1;    private int     attr2;        public MyView(Context context){        super(context);    }        public MyView(Context context, AttributeSet attrs){        super(context, attrs);        getAttrs(context, attrs);    }    public MyView(Context context, AttributeSet attrs, int defStyle){        super(context, attrs, defStyle);        getAttrs(context, attrs);    }            private void getAttrs(Context context, AttributeSet attrs) {        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.myViewDefinedAttr);        attr1 = ta.getBoolean(R.styleable.myViewDefinedAttr_attr1, true);        attr2 = ta.getInt(R.styleable.myViewDefinedAttr_attr2, 0);        ta.recycle();    }}

从上面可以看出,主要是通过context.obtainStyledAttributes得到属性及其值的对应列表。

ta.getBoolean(R.styleable.myViewDefinedAttr_attr1, true);表示得到属性名为attr1的boolean值,若不存在该属性,则默认为true。这里的R.styleable.myViewDefinedAttr_attr1为第一步中的属性列表名_属性名。

ta.recycle();为回收系统资源。

3、调用自定义View

……

调用的主体为<com.trinea.android.common.view.MyView ……/>中内容,需要注意的是跟上面代码类似在外面的布局文件中加入自己的命名空间再通过命名空间调用属性,即

xmlns:myViewXmlns="http://schemas.android.com/apk/res/com.trinea.mypackage",其中myViewXmlns为空间名可自取,值为http://schemas.android.com/apk/res/加当前应用的包名,即AndroidManifest.xml中manifest节点的package值,如下

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.trinea.mypackage"

 

4、自定义属性的类型

format表示的属性类型可以为boolean, string, integer, dimension, float, reference, color, fraction, enum, flag及其混合。

(1) boolean表示布尔值,调用如 xx:attr1="false"
(2) integer表示整型,调用如 xx:attr1="1"
(3) dimension表示尺寸值,调用如 xx:attr1="42dp"
(4) float表示浮点型,调用如 xx:attr1="0.7"
(5) color表示颜色值,调用如 xx:attr1="#00FF00"
(6) string表示字符串,调用如 xx:attr1="#adbddd"
(7) reference表示参考某一资源id,调用如 xx:attr1 = "@drawable/图片ID"
(8) fraction表示百分数,调用如 xx:attr1="30%"
以上类型定义都为<attr name="attr1" format="xxxtype"/>

(9) enum表示枚举值,定义为

调用如 xx:attr1="horizontal"

(10) flag表示位或运算,定义为

调用如:xx:attr1="stateUnspecified | stateUnchanged | stateHidden"

(11) 混合类型,定义为

调用如 xx:attr1 = "@drawable/图片ID|#DDFF00"

转载于:https://www.cnblogs.com/chang-bin/p/5121490.html

你可能感兴趣的文章
代码整洁
查看>>
蓝桥杯-分小组-java
查看>>
Java基础--面向对象编程1(类与对象)
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
关于js sort排序方法
查看>>
JAVA面试常见问题之Redis篇
查看>>
javascript:二叉搜索树 实现
查看>>
网络爬虫Heritrix源码分析(一) 包介绍
查看>>
__int128的实现
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
svn 图标不显示
查看>>
getElement的几中属性介绍
查看>>
iOS 使用Quartz 2D画虚线 【转】
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>