自定义View的实现2

作者: 陈利健 | 来源:发表于2015-01-09 22:34 被阅读204次

先说一下attrs.xml文件。这个文件定义了自定义View的属性的信息,包括属于哪个控件属性的名称,属性的类型。下面是一个普通的attrs.xml的内容

<resources>

<declare-styleable name = “MyView”>

<attr name = “textColor” format = “color”></attr>

<attr name = “textSize” format = “dimension”/>

</declare-styleable>

</resources>

其中标签declare-styleable的name属性代表了接下来定义的属性的所属控件(只是用来区分不同declare-styleable的代号而且,不一定非要和属性相关的控件的名称一致)。标签attr就是用来的定义具体的属性,name代表属性名,format代表属性的类型。

Attrs.xml文件中属性类型format值的格式

引用型reference

定义:<attr name = “background” format = “reference” />

使用:Tools:background = “@drawable/图片ID”

颜色型color

定义:<attr name = “textColor” format = “color” />

使用:tools:textColor = “#ffffff”

布尔型boolean

定义:<attr name = “focusable” format = “boolean” />

使用:tools: focusable = “true”

尺寸型dimension

定义:<attr name = “layout_width” format = “dimension” />

使用:tools: layout_width = “42dip”

浮点型float

定义:<attr name = “fromAlpha” format = “float” />

使用:tools: fromAlpha = “1.0”

整型integer

定义:<attr name = “frameDuration” format = “integer” />

使用:tools: frameDuration = “100”

字符串string

定义:<attr name = “apiKey” format = “string” />

使用:tools: apiKey = “dsegergegasefwg”

百分数fraction

定义:<attr name = “pivotX” format = “fraction” />

使用:tools: pivotx = “200%”

属性定义可以指定多种类型:

定义:< attr name = "background" format = "reference|color" />

使用:android:background = "@drawable/图片ID|#00FF00"

TypedArray

与Context类的obtainStyledAttributes方法一起使用,作为一个不同类型的数据的容器使用。使用是如:

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView);

这句一般是使用在自定义View的构造方法中的,其中attrs是构造方法的形参,而R.styleable.MyView是和attrs.xml相关的。MyView是attrs.xml中declare-styleable的name属性的值。如果这个自定义View在attrs.xml文件中对应的declare-styleable的name属性值为A,那么这里就写R.styleable.A

其中包括很多方法,用来获取这个容器中包含的值

·getColor获取颜色值

·getDimension获取尺寸值

这些方法一般都有这两个参数int index, int defValue。其中index为用来查找属性的检索值。如果实在attrs.xml文件中定义的属性,就是R.styleable.xxxx_yyyy。Xxxx代表declare-styleable的name值,yyyy代表attr的name值。

defValue代表默认值,即如果在xml文件中没有设置,可以使用默认值来进行设置。

AttributeSet是一个属性的集合,与一个在XML文件中的标签相联系。如在自定义View中,构造方法中会有一个AttributeSet类型的参数,这个参数就和XML中定义的自定义View相联系的。一般不需要直接使用它。

相关文章

  • iOS 自定义View动画(needsDisplayForKey

    实现自定义View ,有两种办法: 1、 view上实现 2、layer上实现 方法一:View的drawRect...

  • 自定义view

    目标: 1、掌握自定义view的流程2、掌握自定义view的三个方法3、掌握自定义view实现方式4、掌握自定义v...

  • 自定义View

    目标: 1、掌握自定义view的流程2、掌握自定义view的三个方法3、掌握自定义view实现方式4、掌握自定义v...

  • 自定义view

    目标: 1、掌握自定义view的流程2、掌握自定义view的三个方法3、掌握自定义view实现方式4、掌握自定义v...

  • iOS 自定义view创建和使用问题积累

    自定义view创建 1.纯代码的方式创建自定义View 自定义view的基本步骤 具体实现代码 以上是纯代码实现的...

  • Android 侧滑菜单(侧滑删除)总结

    基本实现思路 通过自定义View的方式实现步骤:1、自定义ViewGroup2、在onLayout 中,获取chi...

  • Android 之 自定义View全解

    本文主要有以下内容: 自定义View的分类 自定义View的注意事项 自定义View的不同实现 自定义View使其...

  • 自定义view,你真的理解onMeasure了吗?

    疑惑 当android内置view无法实现我们的需求,此刻我们需要自定义view来实现定制需求效果。自定义view...

  • Android 自定义View-入门

    基础 1. 分类 自定义View的实现方式有以下几种 2. View绘制流程 View的绘制基本由measure(...

  • iOS扩大按钮点击范围

    1、在自定义的view上使用hitTest:withEvent:方法可以实现其实就是自定义view,实现hitTe...

网友评论

    本文标题:自定义View的实现2

    本文链接:https://www.haomeiwen.com/subject/phefxttx.html