Android一些不太常用XML文件属性的总结
前言
最近做的项目中XML用到了一些平时可能不是太常用的一些属性,可能涉及都AndroidManifest.xml、布局Layout文件或者到具体的控件!
AndroidManifest.xml
①在AndroidManifest.xml文件中标签中添加
,
其中的xxx.xxx.xxx为第三方库包名,如果存在多个库,则用逗号分割它们。这样做是为了项目中的AndroidManifest.xml和第三方库的AndroidManifest.xml合并时可以忽略最低版本限制。
②
是否允许备份应用的数据,默认是true,当备份数据的时候,它的数据会被备份下来。如果设为false,那么绝对不会备份应用的数据,即使是备份整个系统。
③
Android现在提供了一些API,使您可以构建更优雅的变换布局方向的用户界面。这些界面将支持由右到左(RTL)的语言和阅读方向。比如阿拉伯语和希伯来语。
为了使您的应用支持RTL布局,需要在manifest文件中设置元素的android:supportsRtl属性为“true”。一旦启用,该系统将启用各种RTL API来用RTL布局显示您的应用。
如果用了这个属性,有几个问题需要注意:
1. 要求最低SDK版本号为17。
2. 将左——右方向的布局属性转变为开始——结束方向的布局属性。
④
AS的Gradle插件默认会启用Manifest Merger Tool,若Library项目中也定义了与主项目相同的属性(例如默认生成的android:icon和android:theme),则此时会合并失败,并报错。
这时就需要你在manifest.xml中加入上面一句属性。
⑤
enabled属性表示是否这个service能被系统实例化。如果能则为true,否则为false。默认为true。元素有它自身的能应用到所有应用组件的enabled属性,包括services。要是这个service要enabled,那么这个
和
属性都必须为true(它们都是默认值)。如果有一个为false,这个服务就会disabled;它就不会被实例化。
exported属性表示是否其它应用组件能调用这个service或同它交互,如果能则为true,否则为false。当值为false时,只有同一个应用的组件或有相同用户ID的应用能启动这个服务或绑定它。
默认值依赖于服务是否包含intent filters。过滤器的缺失意味着它只能通过指定它准确类名来调用它。这就意味着这个服务只能在应用内部被使用(因为其它应用不知道类名)。因此,在这种情况下,默认值是false。另一方面,至少有一个过滤器意味着这个服务可以在外部被使用,因此,默认值为true。
⑥
excludeFromRecents属性表示控制在不在recent列表中显示。true时不显示;false显示,默认。
tools:ignore=”ExportedActivity”表示允许所有的应用使用它。
⑦intent-filter下的data标签
<code class=" hljs xml"><data android:mimetype="*/*"> <data android:scheme="file"> <data android:host="*"> <data android:path="*"> <data android:pathprefix="*"> <data android:port="*"> <data android:pathpattern=".*..*..*..*..*.vpn"></data></data></data></data></data></data></data></code>
这个标签元素用于把数据规范添加到一个Intent过滤器中,数据规范能够只是数据类型(mimeType属性)、或数据位置标识(URI),也可以是数据类型和数据位置标识(URI)。一个URI(如下格式)被分成几个独立的属性来分别指定:
scheme://host:port/path or pathPrefix or pathPattern
这些属性是可选的,但也是相互依赖的。如果没有给Intent过滤器指定scheme属性,那么所有其他的URI属性都会被忽略。如果没有给过滤器指定host属性,那么port属性和所有的路径属性都会被忽略。
包含在同一个intent-filter元素中所有的data元素只会对这个过滤器起作用。
mimeType
多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions), 它的作用是告诉Android系统本Activity可以处理的文件的类型。
格式:[type]/[subtype]
type有下面的形式:
Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;
Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。
subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。常用的subtype值如下所示:
text/plain(纯文本)
text/html(HTML文档)
application/xhtml+xml(XHTML文档)
image/gif(GIF图像)
image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
image/png(PNG图像)【PHP中为:image/x-png】
video/mpeg(MPEG动画)
application/octet-stream(任意的二进制数据)
application/pdf(PDF文档)
application/msword(Microsoft Word文件)
message/rfc822(RFC 822形式)
multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)
host
这个属性用户定义URI授权的主机部分,除非给过滤器也指定了元素的scheme属性,否则这个属性没有意义。
注意:在Android框架中,主机名的匹配是大小写敏感的,跟RFC格式不一样。因此,要始终使用小写字母来指定主机名。
path/pathPrefix/pathPattern
这个三个属性用于指定URI的路径部分。Path属性指定一个完整的路径,这个路径会跟Intent对象中的路径进行匹配。PathPrefix属性只指定了部分路径,它会跟Intent对象中的路径初始部分匹配。pathPattern属性指定一个要跟Intent对象中的路径进行匹配的完整路径,但是这个路径中可以包含下列通配符:
1. 星号*
通配符,路径中的星号代表任意多个星号之前的那个字符,如a*
,可跟a、aa、aaa、aaaa、…字符串匹配。
2. 点跟星号的组合.*
通配符,它可以跟任意字符串进行匹配,如.*html,可以跟abchhtml、chtml、html、dssf.html、…等字符串匹配。
因为系统读取XML中的字符串时,会把’\’
符号作为强制转义字符,因此就需要两次转义。例如,符号”*”
要被写成”\\*”
,符号’\’
要被写成”\\\\”
。这与Java代码中的写法基本相同。
port
这个属性用于定义URI授权的端口部分。只有给过滤器指定了scheme和host属性时,这个属性才有意义。
scheme
这个属性用于设定URI的scheme部分。它是给指定URI设置的最基本的属性,至少要给过滤器设置一个scheme属性,否则,其他的URI属性就没有意义了。
scheme属性值没有”:”符号结尾(如http,而不是http: )
如果过滤器有一个数据类型(设置了mimeType属性),但没有设置scheme属性,那么系统就会假定scheme是content:和file:
注意:在Android框架中,scheme的匹配时大小写敏感的,跟RFC格式不一样。因此,要始终使用小写字母来指定scheme。
⑧
标签
meta-data就像其名一样,主要用来定义一些组件相关的配置值。
按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中。
使用:
然后在代码中得到我们的值:
//在Activity应用元素。
ActivityInfo info = this.getPackageManager().getActivityInfo(getComponentName(),PackageManag