AndroidManifest.xml文件详解(二)

来源:互联网 发布:sql培训班 编辑:程序博客网 时间:2024/06/01 13:35

文件约定

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

元素

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

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

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

属性

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

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

声明类名称

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

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

<manifest . . .>
   
<application . . .>
       
<serviceandroid:name="com.example.project.SecretService" . . .>
            . . .

        </service>
        . . .

    </application>
</manifest>

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

<manifest package="com.example.project" . . .>
   
<application . . .>
       
<serviceandroid: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字符。