在Android应用程序中,当在XML布局文件中使用Android系统提供的View组件时,开发者可以指定多个属性,通过使用这些属性可以控制View组件的外观行为。如果用户开发的自定义View组件也需要指定属性,此时需要借助属性资源来实现。
在Android应用程序中,属性资源文件被保存在“/res/values”目录下,属性资源的根元素是<resources.../>,在该元素中包含了如下的两个子元素。
■ attr子元素:定义一个属性。
■ declare-styleable子元素:定义一个styleable对象,每个styleable对象就是一组attr属
性的集合。
在Android应用程序中,当使用属性文件定义了属性之后,接下来就可以在自定义组件的构造器中通过AttributeSet对象获取这些属性了。
例如在下面的实例中,演示了使用属性资源的基本过程。
本实例的功能是实现一个淡入淡出的动画效果,当图片显示时自动从透明变成完全不透明。首先需要定义了一个自定义组件,但这个自定义组件需要指定一个额外duration属性,该属性控制动画的持续时间。本实例的具体实现流程如下。
(1)为了在自定义组件中使用duration属性,需要先定义属性资源文件attrs.xml,具体实现代码如下。
通过上述代码定义了属性资源文件的属性后,以后在哪个View组件中使用该属性?该属性到底能发挥什么作用?就不是属性资源文件的职责了。属性资源所定义的属性的作用取决于自定义组件的代码实现。
(2)编写Java程序文件AlphaImageView.java,功能是获取定义该组件所指定的duration属性之后,根据该属性来控制图片透明度的改变。文件AlphaImageView.java的具体实现代码如下。(www.xing528.com)
在上述实现代码中,R.styeable.AlphaImageView、R.styeable.AlphaImageView_duration都是Android SDK根据属性资源文件自动生成的。通过上述代码首先获取了定义AlphaImageView时指定的duration属性,并根据该属性计算图片的透明度和变化幅度。然后重写了ImageView的onDraw(Canvas canvas)方法,该方法启动了一个任务调度来控制图片透明度的改变。
(3)编写界面布局文件main.xml,设置在使用AlphaImageView时为它指定一个duration属性,注意该属性位于“http://schemas.android.com/apk/res/+项目子包”命名空间下,例如应用的包名为com.example.studyresources,那么duration属性就位于“http://schemas.android. com/apk/res/com.example.studyresources”命名空间下。文件main.xml的具体实现代码如下。
在上述代码中,设置用于导入http://schemas.android.com/apk/ res/com.example.studyresources命名空间,并指定该命名空间对应的短名前缀为studyresources。并且为AlphaImageView组件指定自定义属性duration的属性值为60000。
执行后的效果如图9-5所示。
图9-5 执行效果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。