android 自定义view属性

  1. <declare-styleable name="AttrView">  
  2.     <!-- 引用资源 -->  
  3.     <attr name="image" format="reference" />  
  4.     <!-- 颜色 -->  
  5.     <attr name="text_color" format="color" />  
  6.     <!-- 布尔值 -->  
  7.     <attr name="text_display" format="boolean" />  
  8.     <!-- 尺寸大小 -->  
  9.     <attr name="temp1" format="dimension" />  
  10.     <!-- 浮点值 -->  
  11.     <attr name="temp2" format="float" />  
  12.     <!-- 整型值 -->  
  13.     <attr name="temp3" format="integer" />  
  14.     <!-- 字符串 -->  
  15.     <attr name="text" format="string" />  
  16.     <!-- 百分比 -->  
  17.     <attr name="alpha" format="fraction" />  
  18.     <!-- 枚举 -->  
  19.     <attr name="text_align" format="integer">  
  20.         <enum name="left" value="0" />  
  21.         <enum name="right" value="1" />  
  22.         <enum name="center" value="2" />  
  23.     </attr>  
  24.     <!-- 位运算 -->  
  25.     <attr name="text_optimize" format="integer">  
  26.         <flag name="anti" value="0x001" />  
  27.         <flag name="dither" value="0x002" />  
  28.         <flag name="linear" value="0x004" />  
  29.     </attr>  

  1. </declare-styleable>  

后面的format,这些类型都很好理解,它们在TypedArray中都有各种对应或重载的方法,比如获取color的getColor方法,上面我们获取int的getInt等等,这里对大家来说比较新颖的是fraction百分比这个类型,其在TypedArray的对应方法如下:

[java]  view plain  copy
 print ?
  1. getFraction(int index, int base, int pbase, float defValue)  
第一个参数很好理解表示我们定义的属性资源ID,最后一个参数呢也和前面的getInt类似,主要是这第二、三个参数,其作用是分开来的,当我们在xml中使用百分比属性时有两种写法,一种是标准的10%而另一种是带p的10%p:

[html]  view plain  copy
 print ?
  1. aigestudio:alpha="10%"  
  2. aigestudio:alpha="10%p"  
当属性值为10%的时候base参数起作用,我们此时获取的参数值就等于(10% * base),而pbase参数则无效,同理当属性值为10%p时参数值就等于(10% * pbase)而base无效,Just it。还有两个比较类似的类型:枚举和位运算,这两个类型也很好理解,枚举嘛就是从众多的选项中选一个,而位运算则可以选多个并通过“|”组合各种结果:

[html]  view plain  copy
 print ?
  1. aigestudio:text_optimize="anti|dither"  
这种写法相信大家也很常见,比如layout_gravity属性就可以以类似的方式多选,这种方式有一个好处就是我们不用在属性声明中定义太多的值



猜你喜欢

转载自blog.csdn.net/kdsde/article/details/56834416