android 自定义view的xml属性,attrs.xml汇总
转载请注明出处:http://blog.csdn.net/owysaibb/article/details/28435523
对于自定义的组件,我们不仅可以利用view自带的xml属性进行布局控制还可以通过自定义xml属性的方式实现对view的控制.下面就通过我自己的一个小demo给大家演示一下具体的操作流程.大神请移步!!!
本文中的xml属性续 switch button android仿iso7扁平开关按钮详情请移步。
原理解析:
我们一般写xml属性时一般都是android:****的格式,其中的android是命名空间,关于什么是命名空间,这不是本文讨论的范围。一般来说,在xml文件的根部我们都会加上 xmlns:android="http://schemas.android.com/apk/res/android",这其实是android定义好的命名空间。
自定义view的xml属性
当然我也可以使用自己定义的xml属性,下面我们来定义一些属性,这时候我就需要在android工程目录下的res/values/下新建一个attrs.xml文件,
内如如下
- </pre><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
- <resources>
- <declare-styleable name="sliding_switch">
- <attr name="backgroundOn" format="color"/>
- <attr name="backgroundOff" format="color"/>
- <attr name="space" format="dimension"/>
- <attr name="slideColor" format="color"/>
- <attr name="isCheck" format="boolean"/>
- <attr name="width">
- <enum name="wrap_content" value="1"/>
- <enum name="fill_parent" value="2"/>
- </attr>
- <attr name="height">
- <enum name="wrap_content" value="1"/>
- <enum name="fill_parent" value="2"/>
- </attr>
- </declare-styleable>
- </resources>
</pre><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="sliding_switch">
<attr name="backgroundOn" format="color"/>
<attr name="backgroundOff" format="color"/>
<attr name="space" format="dimension"/>
<attr name="slideColor" format="color"/>
<attr name="isCheck" format="boolean"/>
<attr name="width">
<enum name="wrap_content" value="1"/>
<enum name="fill_parent" value="2"/>
</attr>
<attr name="height">
<enum name="wrap_content" value="1"/>
<enum name="fill_parent" value="2"/>
</attr>
</declare-styleable>
</resources>
这个时候一个自定义的view属性文件就定义好了,接下来就是怎么去用这些属性,上面xml代码中的format部分是xml属性的有效值,那么这些属性的有效值有那些呢,通常情况下有color integer string reference dimension这些基本的类型,分别代表颜色,整型 字符串 图片资源id,尺寸资源id.想要了解更多的同学请看下边。
- <attr name = "background" format = "reference" /> reference:参考某一资源ID。例如:android:background = "@drawable/图片ID"
- <attr name = "textColor" format = "color" /> color:颜色值。例如:android:textColor = "#00FF00"
- <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" /> fraction:百分数。
<attr name = "background" format = "reference" /> reference:参考某一资源ID。例如:android:background = "@drawable/图片ID" <attr name = "textColor" format = "color" /> color:颜色值。例如:android:textColor = "#00FF00" <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" /> fraction:百分数。
- enum:枚举值。
- <attr name="orientation">
- <enum name="horizontal" value="0" />
- <enum name="vertical" value="1" />
- </attr>
enum:枚举值。
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
- flag:位或运算。
- <attr name="windowSoftInputMode">
- <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>
flag:位或运算。 <attr name="windowSoftInputMode"> <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>特别要注意:属性定义时可以指定多种类型值。例如:
- <attr name = "background" format = "reference|color" />
<attr name = "background" format = "reference|color" />使用:
- <attr name = "background" format = "reference|color" />
<attr name = "background" format = "reference|color" />在xml中使用xml自定义属性
我们需要在xml布局文件的根节点定义一个命名空间,关于什么是xml命名空间请自行百度吧.
这是程序当中使用的命名空间,其中res/后是你自定义view java文件的包名
- xmlns:app="http://schemas.android.com/apk/res/open.witype.slidingbutton"
[html] view plaincopyprint?
- <open.witype.slidingSwitch.SlidingButton
- android:id="@+id/switch_b"
- app:backgroundOn="@color/withe"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
一般情况下,你只要在xml中申明了对应的命名空间,可以通过和使用android命名空间一样,直接能提示出attrs中的属性,如果没有提示也不要担心,用手写上去也是不会报错的,
在view中接收xml属性
在你自己的view中你必须实现view的构造方法
- public SlidingButton(Context context, AttributeSet attrs) {
- super(context, attrs);
- // TODO Auto-generated constructor stub
- TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.sliding_switch);
- int c_color = ta.getColor(R.styleable.sliding_switch_slideColor,Color.rgb(255, 255, 255));
- int t_color = ta.getColor(R.styleable.sliding_switch_backgroundOn,Color.rgb(98, 195, 208));
- int f_color = ta.getColor(R.styleable.sliding_switch_backgroundOff, Color.rgb(220, 220, 220));
- }
整个流程就是这样.

浙公网安备 33010602011771号