Android自定义View的自定义属性atrrs.xml解析
2017-05-18 15:04
357 查看
想要写出漂亮实用易用的自定义view,离不开自定义属性。那么如何才能做到像官方提供的那些组件一样用xml来定义他的属性呢?一、在res/values目录下建立atrrs.xml文件,代码格式如下:
2.使用:
二、Color:颜色1.定义:
2.使用:
三、boolean:布尔值1.定义:
2.使用:
四、dimension:尺寸值1.定义:
2.使用:
五、float:浮点型1.定义:
2.使用:
六、integer:整型1.定义:
2.使用:
七、string:字符串1.定义:
2.使用:
八、fraction:百分数1.定义:
2.使用:
九、enum:枚举1.定义:
2.使用:
十、flag:位或运算1.定义:
2.使用:
<?xml version="1.0" encoding="utf-8"?> <resources> <attr name="backColor" format="color"/> <declare-styleable name="MyView"> <attr name="backColor"/> </declare-styleable> </resources>
或者
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="backColor" format="color"/> </declare-styleable> </resources>
该文件是定义属性名和格式的地方,需要用<declare-styleable name="MyView"></declare-styleable>包围所有属性。其中name为该属性集的名字,
主要用途是标识该属性集。<attr name="backColor" format="color"/>标签用于说明具体的属性,name为属性名称,format为属性值,比如此处就是color
就是用于颜色值。注意前一种写法,format写在属性集标签外时,属性集里的属性name要和集合外的属性name一致。此时不免有人会问,既然这样为什么
不直接用第二种写法。因为把属性的t写在属性集以外,是为了此属性能在其他的属性集合里也能复用。
二、在布局xml中如下使用该属性:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"><com.littlejie.circleprogress.CircleProgressandroid:id="@+id/circle_progress_bar1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"app:backColor="#112233" /></LinearLayout>三、在自定义组件中,可以如下获得xml中定义的值:
public MyView(Context context, AttributeSet attrs) {super(context, attrs);TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyView);typedArray.getColor(R.styleable.MyView_backColor,0x000000);typedArray.recycle();}在获取某属性标识时,用到"R.styleable.ToolBar_buttonNum",很显然,他在每个属性前面加上标识集的名称"MyView_"。
在来看看各种属性都有些什么类型吧:string , integer , dimension , reference , color , enum......前面几种的声明方式都是一致的,例如:<attr name="buttonNum" format="integer"/>。 只有enum是不同的,用法举例:<attr name="testEnum"><enum name="fill_parent" value="-1"/><enum name="wrap_content" value="-2"/></attr>如果该属性可同时传两种不同的属性,则可以用“|”分割开即可。让我们再来看看布局xml中需要注意的事项。首先得声明一下:xmlns:app="http://schemas.android.com/apk/res-auto"最后来看看java代码中的注意事项。在自定义组件的构造函数中,用TypedArray typaArray= context.obtainStyledAttributes(attrs,R.styleable.ToolBar);来获得对属性集的引用,然后就可以用“typeArray”的各种方法来获取相应的属性值了。这里需要注意的是,如果使用的方法和获取值的类型不对的话,则会返回默认值。在取完值的时候别忘了回收资源哦typeArray.recycle()!1b52a自定义属性数据类型简介:一、reference:参考指定Theme中资源ID。1.定义:
123 | <declare-styleable name="My"><attr name="label" format="reference" ></declare-styleable> |
1 | <Button app:label="@string/label" > |
123 | <declare-styleable name="My"><attr name="textColor" format="color" /></declare-styleable> |
1 | <Button app:textColor="#ff0000"/> |
123 | <declare-styleable name="My"><attr name="isVisible" format="boolean" /></declare-styleable> |
1 | <Button app:isVisible="false"/> |
123 | <declare-styleable name="My"><attr name="myWidth" format="dimension" /></declare-styleable> |
1 | <Button app:myWidth="100dip"/> |
123 | <declare-styleable name="My"><attr name="fromAlpha" format="float" /></declare-styleable> |
1 | <alpha app:fromAlpha="0.3"/> |
123 | <declare-styleable name="My"><attr name="frameDuration" format="integer" /></declare-styleable> |
1 | <animated-rotate app:framesCount="22"/> |
123 | <declare-styleable name="My"><attr name="Name" format="string" /></declare-styleable> |
1 | <rotate app:pivotX="200%"/> |
123 | <declare-styleable name="My"><attr name="pivotX" format="fraction" /></declare-styleable> |
1 | <rotate app:Name="My name is zhang kun xiang"/> |
12345 | <declare-styleable name="My"><attr name="language"><enum name="English" value="1"/></attr></declare-styleable> |
1 | <Button app:language="English"/> |
123456 | <declare-styleable name="My"><attr name="windowSoftInputMode"><flag name="stateUnspecified" value="1" /><flag name = "adjustNothing" value = "0x30" /></attr></declare-styleable> |
1 | <activity android:windowSoftInputMode="stateUnspecified | adjustNothing"> |
相关文章推荐
- Android解析自定义属性的XML实现底部导航栏TabSelectedView,实现灵活的配置扩展
- [Android_Develop]自定义View添加XML属性
- Android自定义View(二、深入解析自定义属性)
- [置顶] Android自定义View(二、深入解析自定义属性)
- Android自定义View(二、深入解析自定义属性)
- Android在代码中调用XML中设置的自定义View属性
- android 自定义view添加自定义xml属性
- Android中View自定义XML属性详解以及R.attr与R.styleable的区别
- Android 自定义view设置xml属性
- Android自定义View之属性解析
- Android自定义View读取XML属性详解
- Android布局文件.xml中的自定义属性(结合封装的自定义View)
- android自定义view的自定义属性在xml中快捷键显示问题
- 安卓自定义View进阶-自定义XML属性解析及R.attr和R.styleable的区别
- Android自定义View中的自定义属性(attrs.xml,TypedArray的使用)
- Android自定义View(二、深入解析自定义属性)
- Android自定义View-xml解析角度理解
- Android中View自定义XML属性详解以及R.attr与R.styleable的区别
- Android 自定义View 中attr属性 深入解析
- Android自定义View及自定义控件属性declare-styleable:自定义控件的属性(attr.xml,TypedArray)的使用