android移动应用开发任务驱动教程:android 9.0+android studio 3.2
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 关于AndroidManifest.xml文件

文件AndroidManifest.xml是Android Studio项目的全局配置文件,是Android应用程序中最重要的文件之一,是每个Android程序中必需的文件,记录应用程序中所使用的各种控件。该文件提供了Android系统所需要的关于该应用程序的必要信息,即在该应用程序的任何代码运行之前系统所必须拥有的信息。另外,当新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。

AndroidManifest.xml文件位于“manifests”文件夹中,其结构、元素以及元素的属性等方面的主要规则说明如下:

(1)元素。在所有的元素中,只有<manifest>和<application>是必需的,且只能出现一次。如果一个元素包含有其他子元素,则必须通过子元素的属性来设置其值。处于同一层次的元素,这些元素的说明是没有顺序的。

(2)属性。按照常理,所有的属性都是可选的,但是有些属性是必须设置的。那些真正可选的属性,即使不存在,其也有默认的数值项说明。除了根元素<manifest>的属性,所有其他元素属性的名字都是以android:作为前缀的。

(3)定义类名。所有的元素名都对应其在SDK中的类名。如果自定义类名,则必须包含类的包名称;如果类与application处于同一数据包中,则可以直接简写为“.”。

(4)多数值项。如果某个元素有超过一个数值,则这个元素必须通过重复的方式来说明其某个属性具有多个数值项,且不能将多个数值项一次性说明在一个属性中。

(5)资源项说明。当需要引用某个资源时,其采用如下格式:@[package:]type:name。例如,<activity android:icon= "@drawable/icon " >。

(6)字符串值。如果字符中包含有“\”,则必须使用转义字符“\\”。

AndroidManifest.xml文件中的通常设置如表1-3所示。

表1-3 AndroidManifest.xml文件中的通常设置

AndroidManifest.xml文件默认生成的代码如表1-4所示。

表1-4 AndroidManifest.xml文件默认生成的代码

AndroidManifest.xml文件各层结点解析如下:

(1)第一层(manifest)的主要属性。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.example.app0101" >
        ……
</manifest>

xmlns:android定义Android命名空间,一般为http://schemas.android.com/apk/res/android,这样使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。

package指定本应用程序内Java主程序包的包名,它也是一个应用进程的默认名称。

(2)第二层(application)的主要属性。

<application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:roundIcon="@mipmap/ic_launcher_round"
      android:supportsRtl="true"
      android:theme="@style/AppTheme" >
    ……
</application>

一个AndroidManifest.xml中必须含有一个<application>标签,这个标签声明了每一个应用程序的控件及其属性,例如icon、label、permission等。

android:allowBackup设置应用程序是否可以通过adb命令备份整个应用的数据。

android:icon声明应用程序的图标,图片一般都放在drawable文件夹下,Android智能终端中看到的图标就是该属性指定的。

android:label给当前的ViewGroup设置一个标签。

android:theme给所有的activity定义了一个默认的主题风格,当然也可以在自己的theme里面去设置它,与网页中的style有点类似。

(3)第三层(activity)的主要属性。

<activity android:name=".MainActivity" >
</activity>

<activity>标签位于<application>标签下方,一个应用程序可以有多个Activity,因此可能会出现多个<activity>标签,该标签也包含很多信息。

android:name用于指定Activity类的名称,例如com.example.App0102.MainActivity。

android:label用于指定应用程序在桌面上的名称和主<activity>的title。

<activity>和<application>里都可以设置android:label标签,<activity>的优先级高于<application>,也就是说两者都设置这个标签的话,<activity>设置的label值将覆盖<application>设置的值。

当<application>里设置了此标签,其他<activity>没有设置的情况下,则应用程序在桌面上的名字和所有activity的title都是这个设置的标签。

当<application>里设置了此标签,主<activity>中也设置了此标签,则应用程序名和主<activity>的title都是主<activity>中设置的标签。其他非主<activity>的title如果没有自己设置此标签,则还是使用<application>中设置的标签;如果其他非主<activity>也设置了此标签,则其title就是自己设置的这个标签。

(4)第四层(intent-filter)的主要属性。

<intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />

</intent-filter>常见的android:name值为android.intent.action.MAIN,表明该activity是作为应用程序的入口,当应用程序存在多个Activity时,该属性决定了哪个Activity最先被启动。

常见的android:name值为android.intent.category.LAUNCHER,表示应用程序在上层的启动程序列表里显示。