《代码里的世界》 —UI篇
用文字札记描绘自己 android学习之路
转载请保留出处 by Qiao
http://blog.csdn.net/qiaoidea/article/details/45599593
【导航】
- 多行文本折叠展开 自定义布局View实现多行文本折叠和展开
1.概述
前面封装view的时候用到了自定义属性,觉得有必要单独讲一下这部分,但是呢,又不想向其他文章一样千篇一律地写这些东西。所以呢,后便会加一些临时的发散思维,引用点有意思的东西。分享东西嘛,随性点儿。
回归正题,我们想在view中使用自定义属性要怎么做呢?
其实有如下几点:
- declare-styleable 在res/values目录下新建xml文件 自定义你的属性
- AttributeSet和TypedArray 在view中获取这些属性对应的值,设置绑定到view上
xmlns申明与引用 在你要使用的地方引入命名空间并使用这些属性,赋值
然后我们来尝试通过这些步骤做些自定义view,同时呢,我期望能方便快捷的绑定一些事件,执行相应操作。尝试来做一下。
xml直接定义view和点击事件的demo
2.实践
其实自定义view的属性算是比较常见的,想来想去却没想到什么比较好写的view。就拿最常见的设置选项来说吧,我希望直接通过简单的xml配置就可以设置其字体大小颜色内容,图标和点击触发的事件。
2.1定义属性
在res/values目录下新建一个attrs.xml的文件,利用declare-styleable定义我们的属性样式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RowItem"><!-- 样式名为RowItem-->
<attr name="textSize" format="dimension"/>
<attr name="textColor" format="color"/>
<attr name="text" format="string" />
<attr name="textStyle"> <!-- text样式(粗体/斜体)-->
<flag name="blod" value="1"/>
<flag name="italic" value="2"/>
</attr>
<attr name="icon" format="reference"/>
<attr name="position" > <!-- 该行所处位置-->
<enum name="single" value="-1"/>
<enum name="top" value="0"/>
<enum name="middle" value="1"/>
<enum name="bottom" value="2"/>
</attr>
<attr name="action" format="string" /><!-- 执行动作-->
</declare-styleable>
</resources>
简单讲解下其中,
- 标签declare-styleable的name属性 :代表了接下来定义的属性的所属控件(只是用来区分不同declare-styleable的代号而且,不一定非要和属性相关的控件的名称一致)
标签attr就是用来的定义具体的属性,name代表属性名,format代表属性的类型。
Attrs.xml文件中属性类型format值的格式
引用型reference
定义:
< attr name = “background” format = “reference” />
使用:
tools:background = “@drawable/图片ID”