android开发教程之自定义属性用法详解

 更新时间:2014年04月13日 11:09:25   作者:  
这篇文章主要介绍了android开发中的自定义属性用法详解,需要的朋友可以参考下

最近项目中经常需要用到自定义控件,因此自定义属性也是经常要用到的,在此说明一下自定义属性的用法:

自定义属性都存在于/value/attr.xml文件中,以如下格式存在。

复制代码 代码如下:

<resource>

<declare-styleable name="自定义属性名称">

<attr name="属性名称" format="属性种类"/>

......

</declare-styleable>

</resource>

对于自定义属性中的format的值及其含义如下:

format属性值:reference 、color、boolean、dimension、float、integer、string、fraction、enum、flag

1. reference:参考某一资源ID。

(1)属性定义:

复制代码 代码如下:

<declare-styleable name = "名称">

   <attr name = "background" format = "reference" />

</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<ImageView

android:layout_width="42dip"
android:layout_height="42dip"
android:background="@drawable/图片ID"
/>

2.color:颜色值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">

<attrname="textColor"format="color"/>

</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<TextView
android:layout_width="42dip"
android:layout_height="42dip"
android:textColor="#00FF00"
/>

3.boolean:布尔值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">

<attrname="focusable"format="boolean"/>

</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<Button
android:layout_width="42dip"
android:layout_height="42dip"
android:focusable="true"
/>

4.dimension:尺寸值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">

<attrname="layout_width"format="dimension"/>

</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<Button
android:layout_width="42dip"
android:layout_height="42dip"
/>

5.float:浮点值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="AlphaAnimation">
<attrname="fromAlpha"format="float"/>
<attrname="toAlpha"format="float"/>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<alpha
android:fromAlpha="1.0"
android:toAlpha="0.7"
/>

6.integer:整型值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="AnimatedRotateDrawable">
<attrname="visible"/>
<attrname="frameDuration"format="integer"/>
<attrname="framesCount"format="integer"/>
<attrname="pivotX"/>
<attrname="pivotY"/>
<attrname="drawable"/>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<animated-rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/图片ID"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100"
/>

7.string:字符串。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="MapView">
<attrname="apiKey"format="string"/>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"
/>

8.fraction:百分数。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="RotateDrawable">
<attrname="visible"/>
<attrname="fromDegrees"format="float"/>
<attrname="toDegrees"format="float"/>
<attrname="pivotX"format="fraction"/>
<attrname="pivotY"format="fraction"/>
<attrname="drawable"/>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
  android:interpolator="@anim/动画ID"

android:fromDegrees="0"
android:toDegrees="360"

android:pivotX="200%"

android:pivotY="300%"
android:duration="5000"

android:repeatMode="restart"

android:repeatCount="infinite"

/>

9.enum:枚举值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">
<attrname="orientation">
<enumname="horizontal"value="0"/>
<enumname="vertical"value="1"/>
</attr>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>

10.flag:位或运算。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">
<attrname="windowSoftInputMode">
<flagname="stateUnspecified"value="0"/>
<flagname="stateUnchanged"value="1"/>
<flagname="stateHidden"value="2"/>
<flagname="stateAlwaysHidden"value="3"/>
<flagname="stateVisible"value="4"/>
<flagname="stateAlwaysVisible"value="5"/>
<flagname="adjustUnspecified"value="0x00"/>
<flagname="adjustResize"value="0x10"/>
<flagname="adjustPan"value="0x20"/>
<flagname="adjustNothing"value="0x30"/>
</attr>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<activity
android:name=".StyleAndThemeActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateUnspecified|stateUnchanged | stateHidden">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

特别要注意:

属性定义时可以指定多种类型值。

(1)属性定义:

复制代码 代码如下:

<declare-styleablename="名称">
<attrname="background"format="reference|color"/>
</declare-styleable>

(2)属性使用:

复制代码 代码如下:

<ImageView
android:layout_width="42dip"
android:layout_height="42dip"
android:background="@drawable/图片ID|#00FF00"
/>

下面说说AttributeSet与TypedArray在自定义控件中的作用:

AttributeSet的作用就是在控件进行初始化的时候,解析布局文件中该控件的属性(keyeg:background)与该值(valueeg:@drawable/icon)的信息封装在AttributeSet中,传递给该控件(View)的构造函数。对于非Android自带的属性,在View类中处理时是无法识别的,因此需要我们自己解析。所以这就要用到另外一个类TypedArray。在AttributeSet中我们有属性名称,有属性值,但是控件如何知道哪个属性代表什么意思呢?这个工作就由TypedArray来做了。TypedArray对象封装了/values/attrs.xml中的styleable里定义的每个属性的类型信息,通过TypedArray我们就可以知道AttributeSet中封装的值到底是干什么的了,从而可以对这些数据进行应用。

AttributeSet就相当于一盒糖,TypedArray就相当于这盒糖上的标签说明,告诉用户每个糖的口味等。这盒糖有什么口味是由用户自己的styleable文件里面的内容来决定的。

相关文章

  • Android Studio查看Android 5.x源码的步骤详解

    Android Studio查看Android 5.x源码的步骤详解

    Google为Android开发者带来Android Studio,用来取代Eclipse。从Android Studio出现起,整机开发和Android源码阅读和编辑一定能用上它。这篇文章小编就带大家学习下如何使用Android Studio查看Android 5.x源码,有需要的可以参考借鉴。
    2016-09-09
  • flutter中的资源和图片加载示例详解

    flutter中的资源和图片加载示例详解

    这篇文章主要为大家介绍了flutter中的资源和图片加载示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Kotlin中标准函数run、with、let、also与apply的使用和区别详解

    Kotlin中标准函数run、with、let、also与apply的使用和区别详解

    相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码,下面这篇文章主要给大家介绍了关于Kotlin中标准函数run、with、let、also与apply的使用和区别的相关资料,需要的朋友可以参考下。
    2018-03-03
  • Android加密之全盘加密详解

    Android加密之全盘加密详解

    这篇文章主要介绍了Android加密之全盘加密详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android性能优化之线程监控与线程统一详解

    Android性能优化之线程监控与线程统一详解

    这篇文章主要为大家介绍了Android性能优化之线程监控与线程统一详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Android开发之开发者头条(一)启动页实现

    Android开发之开发者头条(一)启动页实现

    这篇文章主要介绍了Android开发之开发者头条(一)启动页实现的相关资料,需要的朋友可以参考下
    2016-04-04
  • 详解Android中的Service

    详解Android中的Service

    这篇文章主要介绍了Android中的Service,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • 简单谈谈我的Android屏幕适配之路

    简单谈谈我的Android屏幕适配之路

    我相信Android碎片化问题是让所有的Android开发者都比较头疼的问题.尤其是屏幕适配这一块儿.想要自己的app在不同的设备上面都有一个比较好的显示效果.就必须做好相应的屏幕适配.
    2017-11-11
  • Android接入ffmpeg库及问题解决方法

    Android接入ffmpeg库及问题解决方法

    这篇文章主要介绍了Android接入ffmpeg库的相关知识,文中提到了交叉编译ffmpeg+libx264+libfdk-aac的问题及问题解决方法,需要的朋友可以参考下
    2022-03-03
  • Android 中ScrollView嵌套GridView,ListView的实例

    Android 中ScrollView嵌套GridView,ListView的实例

    这篇文章主要介绍了Android 中ScrollView嵌套GridView,ListView的实例的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论