Android中的各种XML
Android中的各种XML
在android中,有很多xml配置文件,其中,大家最熟悉的就是layout里面的xml文件。但是,在其他文件夹中,也有很多xml文件,针对某个xml或许搜索一下就能立即看懂并且写出自己想要的xml。可每当需要的时候就去查询,增加了各种重复的工作。本文针对这种情况,专门总结在android各种xml文件。由于layout的xml文件属性繁多,加上layout的xml广为熟知,本文不添加layout里面的xml总结。
1、Drawable
在drawable中使用xml,大部分情况是为了定义图片,主要使用shape和selector标签。shape是定义一个形状,而selector主要是定义不同状态下的图片选择,比如按钮按下后更换背景等等。引用时,只需android:background=“@drawable/文件名”
shape使用规则如下:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=["rectangle"|"oval"|"line"|"ring"] > <!-- 圆角 --> <corners android:radius="integer" android:topLeftRadius="integer" android:topRightRadius="integer" android:bottomLeftRadius="integer" android:bottomRightRadius="integer" /> <!-- 渐变 --> <gradient android:angle="integer" android:centerX="integer" android:centerY="integer" android:centerColor="integer" android:endColor="color" android:gradientRadius="integer" android:startColor="color" android:type=["linear"|"radial"|"sweep"] android:useLevel=["true"|"false"] /> <padding android:left="integer" android:top="integer" android:right="integer" android:bottom="integer" /> <size android:width="integer" android:height="integer" /> <solid android:color="color" /> <!-- 描边 --> <stroke android:width="integer" android:color="color" android:dashWidth="integer" android:dashGap="integer" /> </shape>
selector的使用方法如下
<?xml version="1.0" encoding="utf-8" ?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 默认时的背景图片--> <item android:drawable="@drawable/p1" /> <!-- 没有焦点时的背景图片 --> <item android:state_window_focused="false" android:drawable="@drawable/p1" /> <!-- 非触摸模式下获得焦点并单击时的背景图片 --> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/p2" /> <!-- 触摸模式下单击时的背景图片--> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/p3" /> <!--选中时的图片背景--> <item android:state_selected="true" android:drawable="@drawable/p4" /> <!--获得焦点时的图片背景--> <item android:state_focused="true" android:drawable="@drawable/p5" /> </selector>
可以在item标签里面嵌套shape属性,这样的话item的android:drawable属性应去掉。
2、Style
style文件定义了UI的格式和外观。style文件可以应用在单独的View(在layout文件中)或者应用在整个Activity和Application(在manifest文件)中。
注意:style只是一个简单的资源文件,它的取值为name属性对应的取值。因此,你可以在
<resources>
标签里组合其他的style资源使用。
文件位置:
res/values/filename.xml文件名可以随意,style元素的name属性作为ID使用
文件名引用:
在XML文件中: @[package:]style/style_name
语法:
<?xml version="1.0" encoding="utf-8"?><resources> <style name="style_name" parent="@[package:]style/style_to_inheri"> <item name="[package:] style_property_name" >style_value</item> </style></resources>
元素
`<resources>`必须且必须为根元素,没有属性.
<style>
定义一个样式。包含元素。
属性:
name : String类型,必须有该属性. name作为当前style的ID使用。在view和activity以及Application中会使用到这个ID。
parent: Style 资源类型. 引用某个Style,并且继承这个style。
<item>
定义一个Style的属性,必须为<style>
元素的子元素。
属性:
name:属性名称,必须有该属性。将要被定义的style属性名称,可能需要添加一个前缀(如android:textColor)。
例子:
style的XML文件(存放在res/values/):
<?xml version="1.0" encoding="utf-8"?><resources> <style name="CustomText" parent="@style/Text"> <item name="android:textSize">20sp</item> <item name="android:textColor">#008</item> </style></resources>
style XML文件被用于TextView的Style(保存在res/layout/)
<?xml version="1.0" encoding="utf-8"?> <EditText style="@style/CustomText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello, World!" />
3、Animation
animation资源可以定义两种类型的动画之一。
属性动画:
通过修改对象的属性值来创建动画。
视图动画
在Framework中,你可以选择两种类型的动画:
- 补间动画:通过针对一个图片执行一系列的变形来创建一个动画。
- 帧动画:通过顺序显示一系列图片来创建动画。
属性动画
在xml文件定义的动画,通过修改对象的属性值,比如背景颜色或者透明度,并设置一段时间。
文件位置:
res/animator/filename.xml, 文件名将会作为资源ID
编译资源的数据类型:
资源指向ValueAnimator,ObjectAnimator或AnimatorSet
引用:
JAVA:R.animator.filename
XML:@[package:]animator/filename
语法:
<set android:ordering=["together" | "sequentially"]> <objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat"|"reverse"] android:valueType=["intType"|"floatType"]/> <animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat"|"reverse"] android:valueType=["intType"|"floatType"]/> <set> ... </set></set>
文件中必须有一个根元素:要么<set>
,<objectAnimator>
或你可以将一些<set>
元素放入一个组里。
元素:
<set>
一个包含动画元素(`<objectAnimator>`,`<valueAnimator>`或其他`<set>`元素),代表一个AnimatorSet.
你可以指定嵌套的<set>
,以进一步将动画组合在一起。每一个<set>
可以定义他自己的ordering属性。
属性:
android:ordering
指定动画集中,该(set)动画的次序。
取值 | 描述 |
---|---|
sequentially | 按照动画集的顺序执行动画 |
together(默认) | 同时播放set所有动画 |
<objectAnimator>
在一定时间后,指定的动画属性的值。代表一个ObjectAnimator对象。
属性:
android:propertyName
String型,必须。将对象属性用于动画,通过其name属性来引用。比如,你可以指定一个View对象的alpha或者backgroundColor.
由于objectAnimator元素没有target属性
,因此你在XML中无法设置用于动画的target。你必须inflate你的动画XML资源通过调用loadAnimator(),且调用setTarget()来设置包含这个属性的target对象
android:valueTo
float,int或color型,必须。动画属性的结束值。颜色通过十六进制数来表示。
android:valueFrom
float,int或color型.动画属性的开始值。如果不指定,动画开始时,值通过调用属性的get方法获取。
android:duration
int,动画执行的毫秒时间。默认300毫秒。
android:startOffset
int。调用start()后动画延迟执行的毫秒数
android:repeatCount
int.动画重复执行的次数。设置-1表示无穷次或者设置正整数。比如1表示开始运行动画后重复1次,因此,一共执行了2次。默认值是0,表示没有重复。
android:repeatMode
int.到动画结束时,应该做出什么行为。其中android:repeatCount必须设置为正整数这个属性才有效。设置reverse来使得动画反向或者设置repeat来设置动画循环从开始的地方执行。
android:valueType
关键字。如果值是颜色,请不要设置这个属性。动画的Framework会自动处理颜色值。
值 | 描述 |
---|---|
intType | 指定动画的值为int |
floatType(默认) | 指定动画的值为float |
示例:
文件存放在res/animator/propertyanimator.xml
<set android:ordering="sequentially"> <set> <objectAnimator android:propertyName="x" android:duration="500" android:valueTo="400" android:valueType="intType"/> <objectAnimator android:propertyName="y" android:duration="500" android:valueTo="300" android:valueType="intType"/> </set> <objectAnimator android:propertyName="alpha" android:duration="500" android:valueTo="1f"/></set>
为了运行这个动画,你必须在代码中的AnimatoSet对象里inflate这个XML资源文件,在开始动画前对所有的动画设置target对象。可以方便地通过调用setTarget()为所有的AnimatorSet的子标签设置同一个target对象。示例如下:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator);set.setTarget(myObject);set.start();
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 瘸腿蛤蟆笔记cocos2d-x-3.2移植到到android步骤及问题定位
- 普通android工程转换为C/C++工程之后,再还原成android工程的解决
- Android中可以做的两件坏事---破解锁屏密码和获取Wifi密码
- 【Unity3d】Unity5与Android交互通信(使用Android(安卓)Studio2.4
- 【移动开发】Android中Theme和Style的使用
- Android(安卓)简单快捷高效的屏幕适配
- Android(安卓)主题之安装的APK主题文件