AndroidManifest.xml文件详解(二)

文件约定

某些约定和规则普遍适用于清单中的所有元素和属性:

元素

只用<manifest>和<application>元素时必须的,而且这两个元素在文件中只能出现一次。其他元素则可以多次出现在清单中,或者根本就不出现—但是为了构建一个有意义的清单,必须要在清单中声明某些元素。

一个元素所包含的任何声明,包括它所包含的其他元素,所有的值都是通过属性来设置的,而不是用夹在开闭元素之间的字符数据。

相同级别的元素通常是没有顺序的。例如,<activity>、<provider>、<service>元素可以是任意顺序的。(<activity-alias>元素是个例外,它必须放在它所代表的<activity>元素的后面。)

属性

在正式的含义中,所有的属性都是可选的,但是,为了达成目的,必须要给元素指定一些属性。对于真正的可选属性,会指定发生在特殊情况下的默认值或状态。

除了<manifest>根元素的一些属性之外,其他所有属性的命名都带有android:前缀—例如,android:alwaysRetainTaskState。因为这个前缀是通用的,所以本文档在提到属性名时,通常会忽略这个前缀。

声明类名称

许多元素都对应着Java对象,包括代表应用程序自己的元素<application>,以及基本的组件—<activity>、<service>、<receiver>、<provider>等。

如果要定义子类,那么这些子类几乎总是继承以下组件类:Activity、Service、BroadcastReceiver、ContentProvider。子类是通过name属性来声明的。这个名称必须是完整Java包名。例如,下例演示了Service子类的声明方法:

<manifest . . . >
    <application . . . >
        <service android:name="com.example.project.SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

但是,也可以使用简略的表达方式,用”.”符号做为name属性值的第一个字符。在Android系统解析是会在”.”符号前追加包名(包名是在<manifest>元素的package属性中声明的)。下例的声明方法与上例的结果相同:

<manifest package="com.example.project" . . . >
    <application . . . >
        <service android:name=".SecretService" . . . >
            . . .
        </service>
        . . .
    </application>
</manifest>

在启动组件时,Android会创建这个命名子类的一个实例对象。如果没有指定子类,那么就会创建一个基类的实例对象。

多个值的设定

如果要给一个元素指定多个值,那么几乎总是重复使用这个元素,而不是在一个元素中列出多个值。如:

<intent-filter . . . >
    <actionandroid:name="android.intent.action.EDIT"/>
    <actionandroid:name="android.intent.action.INSERT"/>
    <actionandroid:name="android.intent.action.DELETE"/>
    . . .
</intent-filter>

资源值的设定

有一些属性值是能够显示给用户的—例如,Activity的标题和图标。这些属性值应该被本地化,并因此要设置在资源或主题中。资源值是用下列格式来表示的:@[package:]type:name

如果资源与应用在同一个包中,那么package的名称可以被忽略,type是资源的类型—如“string”或“drawable”,name是标识指定资源的名称。例如:

<activity android:icon=”@drawable/smallPic” . . . >

来自主题的值是用类似的方式来表示的,但是要以‘?’开始,而不是‘@’:

?[package:]type:name

String值的设定

当属性值是一个字符串是,‘\\’符号要用于字符转义—如‘\\n’表示在此处换行,‘\\uxxxx’表示‘xxxx’是Unicode字符。

声明:本文采用 BY-NC-SA 协议进行授权,本文链接:AndroidManifest.xml文件详解(二)

发表评论