Posts Android自定义属性
Post
Cancel

Android自定义属性

创建自定义属性需要以下步骤:

  • 创建一个自定义View。
  • 创建values/attrs.xml文件,并定义属性。
  • 在View中获取属性值并使用。

自定义属性

1
2
3
4
5
6
7
8
9
<resources>
   <declare-styleable name="PieChart">
       <attr name="showText" format="boolean" />
       <attr name="labelPosition" format="enum">
           <enum name="left" value="0"/>
           <enum name="right" value="1"/>
       </attr>
   </declare-styleable>
</resources>

declare-styleable: 表示一个属性组。它的name必须和你自定义view的名字相同。

attr:表示单独的一个属性。format代表属性的格式,格式包括很多种。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<attr name="background" format="reference" /> <!--引用类型,比如drawable-->
<attr name="textColor" format="color" /> <!--颜色值-->
<attr name="focusable" format="boolean" /> <!--布尔值-->
<attr name="layout_width" format="dimension" /> <!--尺寸-->
<attr name="fromAlpha" format="float" /> <!--浮点值-->
<attr name="frameDuration" format="integer" /> <!--整型值-->
<attr name="apiKey" format="string" /> <!--字符串-->
<attr name="pivotX" format="fraction" /> <!--百分数-->
<attr name="orientation">  <!-枚举-->
    <enum name="horizontal" value="0" />
    <enum name="vertical" value="1" />
</attr>
<attr name="windowSoftInputMode"> <!-flag-->
    <flag name="stateUnspecified" value="0" />
    <flag name="stateUnchanged" value="1" />
    <flag name="stateHidden" value="2" />
    <flag name="stateAlwaysHidden" value="3" />
    <flag name="stateVisible" value="4" />
    <flag name="stateAlwaysVisible" value="5" />
    <flag name="adjustUnspecified" value="0x00" />
    <flag name="adjustResize" value="0x10" />
    <flag name="adjustPan" value="0x20" />
    <flag name="adjustNothing" value="0x30" />
</attr>

获取属性值

  1. 通过context的obtainStyledAttributes方法获取TypedArray。
1
2
3
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0);

  1. TypedArray提供如下方法获取属性值
1
2
3
4
5
6
public int getDimensionPixelSize(@StyleableRes int index, int defValue)//获取尺寸
public int getColor(@StyleableRes int index, @ColorInt int defValue)//获取颜色值
public boolean getBoolean(@StyleableRes int index, boolean defValue)//获取布尔值
public float getFloat(@StyleableRes int index, float defValue)//获取float值

参考

This post is licensed under CC BY 4.0 by the author.

Retrofit源码分析

RxJava源码分析

Comments powered by Disqus.