第二篇博客,今天来记录一个Android开发中重要的知识点:自定义View。
OK,在节目开始之前,首先来一个搞笑段子:
刚才看到一个身影很像你,我疯了似的追上去,在靠近的那一刻才想起这个城市没有你。我停下脚步,放下手中的砖头,差点就打错人了。
好的,进入正题,Android为开发者提供了一套完善的UI设计模板,系统控件都是基于这套模板编写的,我们要自定义View,也要遵循模板。
自定义View是一个非常复杂庞大的领域,设计到的东西实在太多,一篇博客不可能说的完,今天就讲最基础的一点:自定义View中的自定义属性。
Android系统提供的自定义View模板可以让我们轻松的新增自定义属性,分为3步:编写attr.xml,在布局文件中使用,在自定义View中获取自定义属性的值。
第一步:编写attr.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
</declare-styleable>
</resources>
这个代码一目了然,申明一个自定义View属性,取名为MyView,下有两个属性,每个属性都一个一个format,只是这个format的类型要记录下。
format类型总共有10种,下面列出10种类型和对应的赋值。
1、color 颜色值
<declare-styleable name="MyView">
<attr name="textColor" format="color" />
</declare-styleable>
<xxx:textColor="#f0f0f0"/>
2、dimension 距离
<declare-styleable name="MyView">
<attr name="size" format="dimension" />
</declare-styleable>
<xxx:size="30dp"/>
<declare-styleable name="MyView">
<attr name="size" format="reference" />
</declare-styleable>
<xxx:size="@dimen/size"/>
4、boolean 用于开关
<declare-styleable name="MyView">
<attr name="isDark" format="boolean" />
</declare-styleable>
<xxx:isDark="true"/>
5、float 浮点数
<declare-styleable name="MyView">
<attr name="size" format="float" />
</declare-styleable>
<xxx:size="0.7"/>
6、integer 整数
<declare-styleable name="MyView">
<attr name="size" format="integer" />
</declare-styleable>
<xxx:size="30"/>
7、string 字符创
<declare-styleable name="MyView">
<attr name="title" format="string" />
</declare-styleable>
<xxx:title="HelloWorld"/>
8、fraction 分数,通常用于表示百分比
<declare-styleable name="MyView">
<attr name="size" format="fraction" />
</declare-styleable>
<xxx:size="60%"/>
9、|选择 在给定选项中选择
<declare-styleable name="MyView">
<attr name="size" format="dimension|reference" />
</declare-styleable>
<xxx:size="20dp|@dimen/size"/></span>
10、enum 枚举
<declare-styleable name="MyView">
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
</declare-styleable>
<xxx:orientation="vertical">
这个其实很常见,比如ImageView的scaleType,系统给定了几个选项,你只能在其中选择一个
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xxx="http://schemas.android.com/apk/res/包名"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<包名.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
xxx:textSize="20dp"
xxx:color="#f0f0f0"/>
</LinearLayout>
一定记得加上命名控件xmlns,否则是不能使用自定义属性的。
第三步:在自定义view中获取自定义属性
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView);
int color = a.getColor(R.styleable.MyView_color, Color.WHITE);
float textSize = a.getDimension(R.styleable.MyView_textSize, 50);
a.recycle();//一定记得回收
好了,至此关于自定义View的自定义属性的模板就说完了,正如前面所说,Android自定义View是一个非常庞大的领域,今天这篇博客只是选一个很小的点做下记录。后面会再写很多博客记录自定义View的其它方面知识。
感谢大家的收看,本期节目就到这里,下期再见~