Android开发-API指南-<activity>

<activity>

英文原文:http://developer.android.com/guide/topics/manifest/activity-element.html
采集(更新)日期:2014-6-4
搬迁自原博客:http://blog.sina.com.cn/s/blog_48d491300100zmg0.html

语法:
<activity android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale", "uiMode",
                                 "orientation", "screenSize", "smallestScreenSize"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:permission="string"
          android:process="string"
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>
包含于:
<application>
可包含:
<intent-filter>
<meta-data>
说明:
声明一个 Activity( Activity 子类),实现应用程序的可视化用户界面。 所有 Activity 都必须在manifest文件中用 <activity> 声明。 对任何未经声明的 Activity 系统都会视而不见,且不会运行。
属性:
android:allowTaskReparenting
当某个拥有相同 affinity 的任务即将返回前台时,Activity 是否能从启动时的任务转移至此任务中去 —“true”表示可以移动,“false”表示它必须留在启动时的任务中。

如果未设置本属性,则 <application> 元素中对应的 allowTaskReparenting 属性值将会应用于 Activity 。 默认值是“false”。

通常在启动时,Activity 与启动时的任务相关联,并在整个生命周期都位于此任务中。 利用本属性可以强行让 Activity 在当前任务不再显示时归属于另一个与其 affinity 相同的任务。 典型应用是让一个应用程序的 Activity 转移到另一个应用程序关联的主任务中去。

例如,如果某条 e-mail 信息包含了一个 Web 页的链接,点击此链接将启动一个 Activity 显示此 Web 页。 这个 Activity 是由浏览器程序定义的,但却作为 e-mail 任务的一部分被启动。 如果它重新归属于浏览器的任务,那么在下次浏览器进入前台时就会显示出来,并且会在 e-mail 任务再次回到前台时消失。

Activity 的 affinity 由 taskAffinity 属性定义。 任务的 affinity 由根 Activity 的 affinity 确定。 然而,根据规定,根 Activity 总是位于 affinity 同名的任务中。 因为以“singleTask”和“singleInstance" 模式启动的 Activity 只能位于任务的根部, 所以 Activity 的重新归属仅限于“standard”和“singleTop”启动模式。 (请参阅 launchMode 属性。)

android:alwaysRetainTaskState
系统是否一直维持 Activity 所属任务的状态 —“true”表示是,“false”表示允许系统在特定情况下重启任务。 默认值是“false”。 本属性只对任务的根 Activity 有效,其他 Activity 都忽略本属性。

通常,在用户从主屏幕(Home Screen)重新运行应用程序时,系统有时会清理任务(清除任务栈中根 Activity 以上的所有 Activity)。 执行此操作的典型情况是:用户有段时间(比如30分钟)没有访问该任务了。

然而,一旦本属性设为“true”,则不论用户位于何处,将总是返回任务的最后状态。 举例来说,这对浏览器就很有用,Web 浏览器这类应用需要保持很多状态(诸如多个已打开的页面),用户不期望这些状态马上消失。

android:clearTaskOnLaunch
每次从主屏幕重新执行程序时,是否将任务中除根 Activity 以外的所有 Activity 都清除 — “true”表示总是清除至根 Activity,“false”则不清除。 默认值是“false”。 本属性只对启动新任务的 Activity(根 Activity)有效,其他 Activity 都忽略本属性。

如果此值为“true”,则每当用户再次启动任务时都会进入根 Activity, 无论之前在此任务中做过什么操作,也无论上次是用 Back 还是 Home 键离开任务的。 如果此值为“false”,那么在某些情况下也许还会清理任务(请参阅 alwaysRetainTaskState属性),但并不是每次都会执行。

例如,假设用户从主屏幕启动了 Activity P,又从 P 转到 Activity Q。 接下来用户按下了 Home 键,然后再回到 Activity P 。 通常,用户将会看到 Activity Q,因为在 P 的任务里最后操作的就是 Q。 然而,如果 P 把本属性设为“true”,则用户按下 HOME 键时所有在它之上的 Activity(本例中是Q)都会被清除,任务将进入后台。 因此用户在下次返回该任务时就只会看到 P 了。

如果本属性和 allowTaskReparenting 都设为“true”,那么所有可改变任务归属的 Activity 都会转移到具有相同 affinity 的任务中去,其余的 Activity 都将如上所述被清除。

android:configChanges
列出 Activity 在变化时将会自行处理的配置参数。 默认情况下,如果运行时配置发生了变化, Activity 会被关闭并重启。 但在本属性中声明配置参数将会阻止 Activity 的重启,Activity 将会保持运行,且会调用其 onConfigurationChanged()方法。

注意: 请尽量避免使用本属性,这只能用作最后的手段。 关于如何正确处理配置变化引起的重启,详情请参阅 处理运行时配置的变化

下面列出本属性可填入的值,多个值之间用“|”分隔 — 例如“locale|navigation|orientation”。

说明
"mcc" IMSI 移动国家代码(MCC)发生改变 — 检测到 SIM 卡并更新了 MCC。
"mnc" IMSI移动网络代码(MNC)发生改变——检测到 SIM 卡并更新了 MNC。
"locale" 地区发生改变——用户选择了新的语言(用于文本显示)。
"touchscreen" 触摸屏发生改变(通常不可能发生)。
"keyboard" 键盘发生改变 — 比如用户插入了外接键盘。
"keyboardHidden" 键盘功能发生改变 — 比如用户让硬键盘显示出来。
"navigation" 导航手段(轨迹球/D-Pad)发生了改变(通常不可能发生)。
"screenLayout" 屏幕布局发生了改变 — 可能是由于激活了其他显示屏。
"fontScale" 字体缩放倍数发生了改变 — 用户选择了新的全局字体大小。
"uiMode" 用户界面模式发生了改变 — 可能是由于用户把设备放进桌面/车用底座里,或者是变成了夜间模式。 请参阅 UiModeManager自API 级别 8 开始加入。
"orientation" 屏幕方向发生了改变 — 用户旋转了设备。

注意: 如果应用程序的目标版本是 API 级别 13 以上的话(由 minSdkVersiontargetSdkVersion 属性定义),且须同时声明“screenSize" 参数,因为设备在横向/竖向切换时 screenSize 参数也会发生改变。

"screenSize" 当前可用的屏幕尺寸发生改变。 这表示当前可用的屏幕大小发生了改变,与当前屏幕长宽比例有关,因此这会在用户改变了纵横方向时发生。 不过,如果用户程序的目标版本是 API 级别 12 以下时, Activity 将总是自行处理本参数的变化 (即使在 Android 3.2 以上版本中运行,本参数的变化也不会导致 Activity 的重启)。

自 API 级别 13 开始加入。

"smallestScreenSize" 屏幕的物理尺寸发生了改变。 这种变化与屏幕的方向无关,因此只会在屏幕真实的物理大小发生变化时才会发生,比如切换到外接显示器。 本参数的变化和 smallestWidth 参数 的变化相呼应。 不过,如果应用程序的目标版本是 API 级别 12 以下, 则 Activity 将总是自行处理本参数的变化 (即使在 Android 3.2 以上版本中运行,本参数的变化也不会导致 Activity 的重启)。

自 API 级别 13 开始加入。

"layoutDirection" Layout 的方向放生了改变。 例如,从左到右(LTR)变成了从右到左(RTL)。 自 API 级别 17 开始加入。

所有以上参数的改变都会影响到应用程序引用的资源值。 因此在调用 onConfigurationChanged() 时,通常需要重新读取一下所有的资源(包括 View Layout、drawable 等等),以便正确应对参数的变化。

android:enabled
Activity 能否被系统实例化 — “true”表示可以,“false”表示不允许。 默认值是“true”。

<application> 元素拥有自己的 enabled 属性,它适用于应用程序中所有的组件,包括 Activity。 系统要能够实例化 Activity , <application>< activity >的 enabled 属性都必须设为“true”(这也都是默认值)。 只要其中有一个是“false”, Activity 就不能被实例化。

android:excludeFromRecents
Activity 是否排除在用户最近访问应用程序的列表(“recent apps”)之外 。 也就是说,如果本 Activity 是新任务中的根 Activity,则本属性确定了该任务是否不出现在最近应用程序列表中。 如果要排除在列表外,就设为“true”。 如果要包含在列表中,则设为“false”。 默认值是“false”。
android:exported
Activity 是否能被其他应用程序的组件启动 —“true”表示可以,“false”表示不能。 如果设为“false”,那么 Activity 仅能被本应用程序或用户ID相同的应用程序的组件启动。

默认值取决于 Activity 是否包含 Intent 过滤器。 如果不存在过滤器,则意味着 Activity 只能通过指定准确的类名来启动。 这表示 Activity 仅限于应用程序内部使用(因为其他应用程序无法知道它的类名)。 在这种情况下,默认值是“false”。 另一方面,只要存在一个以上的过滤器,就意味着 Activity 愿意被外部启动,这时默认值就是“true”。

本属性并不是限制 Activity 向其他应用程序开放的唯一手段。 你还可以用权限来限制外部对象对 Activity 的启动(请参阅 permission 属性)。

android:finishOnTaskLaunch
每当用户再次启动任务时(在主屏幕上选择该任务),已存在的 Activity 实例是否应该关闭 — “true”表示需要关闭,“false”表示不要关闭。 默认值是“false”。

如果本属性和 allowTaskReparenting 都设为“true”,则本属性优先。 Activity 的 affinity 将被忽略。 Activity 将不会改变归属的任务,而是被销毁。

android:hardwareAccelerated
是否为本 Activity 开启硬件加速渲染功能 —“true”表示开启,“false”表示关闭。 默认值是“false”。

自 Android 3.0 开始,应用程序可以使用硬件加速的 OpenGL 渲染器来改善很多常用 2D 图形操作的性能。 当硬件加速渲染开启时,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 内的操作都会被加速。 即使应用程序没有显式调用系统 OpenGL 库,这仍能使动画更加平滑、屏幕滚动也更加平顺、整体响应性能获得改善。 因为启用硬件加速功能需要更多的资源,应用程序将消耗更多的 RAM 。

请注意,并非所有的 OpenGL 2D 操作都会被加速。 如果开启了硬件加速渲染功能,请对应用程序进行测试,以确保渲染的正常使用。

android:icon
代表 Activity 的图标。 当需要在屏幕上用图标来表示 Activity 时,将会显示本图标。 例如,在桌面(launcher)窗口中显示用于启动任务的 Activity 图标。 图标常常伴随着一个文本标签(请参阅android:label属性)。

本属性必须设为对 drawable 资源的引用,资源内包含了图片的定义。 如果未设置本属性,则用作为全局设置的应用程序图标代替(请参阅 <application> 元素的 icon 属性)。

Activity 的图标 — 无论是用本属性还是用 <application> 元素的属性设置的 — 都将同时作为 Activity 所有 Intent 过滤器的缺省图标(请参阅 <intent-filter> 元素的 icon 属性。

android:label
供用户阅读的 Activity 的 Label。 当必须向用户标识 Activity 时,本 Label 将显示在屏幕上。 Label 常常是跟在 Activity 图标后面显示的。

如果未设置本属性,则用作为全局设置的应用程序 Label 代替(请参阅 <application> 元素的 label 属性)。

Activity 的 Label — 无论是用本属性还是用 <application> 元素的属性设置的 — 都将作为 Activity 所有 Intent 过滤器的缺省 Label(请参阅 <intent-filter> 元素的 label 属性)。

Label 应设为一个对字符串资源的引用,这样就能像其他用户界面内的字符串一样对其进行本地化。 不过,考虑到开发时的便利性,也可以直接将其设为字符串。

android:launchMode
指明 Activity 的启动模式。 当调用 Activity 来处理 Intent 时, Activity 的工作模式与四种标志(FLAG_ACTIVITY_*常量有关,这些常量在 Intent 中定义。它们是:

standard
singleTop
singleTask
singleInstance

缺省模式是“standard”。

如下表所述,这些模式归为两组: “standard”和“singleTop”模式的 Activity 为一组, “singleTask”和“singleInstance”模式的 Activity 为另一组。 用“standard”或“singleTop”模式启动的 Activity 可以被实例化多次。 这些实例可以属于任何一个任务,并且可以处于 Activity 栈的任何位置。 典型情况下,它们被任务通过调用 startActivity() 启动并置入其中(除非 Intent 对象包含 FLAG_ACTIVITY_NEW_TASK 标志,这种情况下会选取其他任务 — 请参阅 taskAffinity 属性)。

相反,“singleTask”和“singleInstance”模式的 Activity 只能启动一个任务。 它们总是位于 Activity 栈的根部。 不仅如此,设备同时只保留一个 Activity 实例 — 只启动一个任务。

standard”和“singleTop”模式之间只有一点不同: 每次有“standard”模式 Activity 的 Intent 发生时, 都会新建一个 Activity 类的实例来响应该 Intent。 每个实例只负责处理一个 Intent 。 同理,singleTop 模式 Activity 的新实例也可以用于处理新发生的 Intent 。 不过,如果目标任务的栈顶已经存在该 Activity 的实例了,则此实例将收到这个新 Intent(在 onNewIntent() 里);而不会再创建新的实例了。 在其他情况下 — 比如目标任务中已存在“singleTop”模式的 Activity 但却不是在栈顶,或者在栈顶但却不是位于目标任务中 — 还是会创建新的实例并压入栈顶。

singleTask”和“singleInstance”模式之间也只有一点差别: “singleTask”模式的 Activity 允许其他 Activity 加入它的任务。 它总是处于任务的根部,而其他 Activity (必须是“standard”和“singleTop”模式的 Activity )可以在它的任务中启动。 相反,“singleInstance”模式的 Activity 就不允许其他 Activity 加入它的任务,它是任务里唯一的 Activity 。 如果它启动了其他 Activity,也会被放入另一个任务中 — 类似 Intent 中设置了 FLAG_ACTIVITY_NEW_TASK 标志的情况。

使用场合启动模式多个实例?注释
正常启动大多数 Activity "standard" 默认值。系统总是在目标任务中创建 Activity 的新实例并把 Intent 传入。
"singleTop" 有条件的 如果目标任务的栈顶已经存在本 Activity 的实例,则系统通过调用 onNewIntent() 方法传入 Intent,而不再创建 Activity 的新实例。
特殊启动模式
(不建议在正常情况下使用)
"singleTask" 系统在一个新任务的根部创建 Activity 并传入 Intent 。 不过,如果本 Activity 的实例已经存在,系统将通过调用它的 onNewIntent() 方法来传入 Intent,而不再创建新的实例。
"singleInstance" 除了系统不在实例所属任务中启动其他 Activity 以外,与“singleTask"”相同。 本 Activity 总是其任务中的唯一成员。

如上表所述,standard是默认模式,适用于大多数类型的 Activity 。 SingleTop 也是常用的启动模式,适用于多种 Activity 。 其他模式 — singleTasksingleInstance对于大多数应用程序而言并不适用, 因为它们的用户交互模式与其他多数应用大不相同,很可能会让用户感到陌生。

无论选择了哪种启动模式,都要确保对 Activity 的可用性进行测试,包括 Activity 启动过程、从其他 Activity 和任务中用 Back 键返回的过程。

关于启动模式及其与 Intent 标志位的关系,详情请参阅文档 任务和回退栈

android:multiprocess
是否可以把 Activity 的实例放入启动它的组件所在的进程中。 — “true”表示可以,“false” 表示不可以。 默认值是“false”。

通常情况下, Activity 的新实例会放入应用程序指定的进程中,所以 Activity 的所有实例都运行在同一个进程中。 然而,如果本属性设为“true”, Activity 的进程就可以在多个进程中运行, 这就允许系统在任何需要用到该 Activity 的进程中(权限允许时)创建实例,尽管这也许永远都用不到。

android:name
实现 Activity 的类名, 也即 Activity 的子类。 本属性值应该是一个完全限定的类名(比如“com.example.project.ExtracurricularActivity”)。 不过作为简称,如果名称的首字符是句点(比如“.ExtracurricularActivity”),那么 <manifest> 元素中设置的包名会自动加到前面。

应用程序一经发布,就 不应该修改本名称 (除非设置了android:exported="false")。

没有默认值,必须指定本属性。

android:noHistory
当用户离开且屏幕上已看不到 Activity 时,是否要从栈中清除并结束(调用其 finish() 方法)它 — “true”表示需要结束,“false”表示不要结束。 默认值是“false”。

此值为“true”意味着 Activity 不会留下历史记录。 任务不会在栈中保留此 Activity ,因此用户也将无法返回它。

本属性自 API 级别 3 开始加入。

android:parentActivityName
定义本 Activity 的父 Activity。 本属性值必须与父 Activity 的类名一致,由 < activity > 元素的 android:name 属性对应。

当用户点击 ActionBar 的 Up 按钮时,系统将读取本属性以确定应该打开的 Activity 。 利用本属性,系统还可以通过 TaskStackBuilder 生成 Activity 的 back 栈。

为了支持 API 4~16 版本的系统,你也可以通过 定义了 "android.support.PARENT_ACTIVITY"< meta-data > 元素来声明父 Activity:

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.app.MainActivity" />
</activity>

关于声明父 Activity 以支持 Up 导航的更多信息,请阅读 提供 Up 导航

本属性自 API 级别 16 开始加入。

android:permission
要启动本 Activity 或者要用本 Activity 响应 Intent ,客户端必须拥有的权限名称。 如果 startActivity()startActivityForResult() 的调用者没有被授权,那么它的 Intent 将不会传递给 Activity。

如果未设置本属性,则会把 <application> 元素的 permission 属性应用到本 Activity 上。 如果这两个属性都没有设置,那么 Activity 将不受权限保护。

关于权限的详细信息,请参阅介绍一文中的 权限 章节和另一篇文档 安全和权限

android:process
将要运行 Activity 的进程名称。 通常,同一个应用程序的所有组件都会运行在应用启动时的默认进程中,你不需要用到本属性。 不过必要的时候,可以用本属性覆盖缺省的进程名称,你就可以让应用程序的多个组件分开运行于多个进程中。

如果赋予本属性的名称是以冒号(‘:‘)开头的,那么在必要的时候会新建一个属于应用程序的私有进程, Activity 将运行于该进程中。 如果进程名称以小写字母开头,则 Activity 将运行于一个以该名称命名的全局进程中,并赋予应有的权限。 这就允许不同应用程序的组件共享同一个进程,以减少资源的占用。

<application> 元素的 process 属性可以为全体组件设置默认的进程名称。

android:screenOrientation
Activity 在设备上的显示方向。

属性值可以设为以下字符串之一:

"unspecified" 默认值。由系统选择方向。选择的策略、进而根据特定的内容做出的选择,可能因不同的设备而各不相同。
"behind" 与 Activity 栈中下方相邻的 Activity 方向相同。
"landscape" 横向(宽度大于高度)。
"portrait" 纵向(高度大于宽度)。
"reverseLandscape" 与正常方向相反的横向。自 API 级别 9 开始加入。
"reversePortrait" 与正常方向相反的纵向。自 API 级别 9 开始加入。
"sensorLandscape" 横向,但基于设备传感器,既可能是正常横向也可能是反向横向。自 API 级别 9 开始加入。
"sensorPortrait" 纵向,但基于设备传感器,既可能是正常纵向也可能是反向纵向。自 API 级别 9 开始加入。
"userLandscape" 横向,但基于设备传感器和用户的传感器设置,既可能是正常横向也可能是反向横向。 如果用户锁定了基于传感器的旋转,则本属性与landscape作用一样,否则就与sensorLandscape一样。 自 API 级别 18 开始加入。
"userPortrait" 纵向,但基于设备传感器和用户的传感器设置,既可能是正常纵向也可能是反向纵向。 如果用户锁定了基于传感器的旋转,则本属性与portrait作用一样,否则就与sensorPortrait一样。 自 API 级别 18 开始加入。
"sensor" 由设备的方向传感器来确定方向。 显示的方向取决于用户如何放置设备,当用户旋转设备时就会发生改变。 不过,有些设备默认情况下无法旋转至全部四个方向。 要允许使用全部4个方向,请用“ "fullSensor"”属性。
"fullSensor" 由设备的方向传感器确定为四个方向中的一个。 这类似于“sensor”,只是可以是四个方向中的任意一个,而不论设备正常情况如何 (比如,有些设备通常不会使用横向反向和纵向反向,但这个属性可以启用)。 自 API 级别 9 开始加入
"nosensor" 不根据物理上的方向传感器来确定方向。 传感器将会被忽略,因此用户移动设备时显示方式不会旋转。 除此之外,系统使用与“unspecified”属性相同的原则来选择方向。
"user" 用户当前所用的方向。
"fullUser" 如果用户锁定了基于传感器的旋转,本属性与user的作用相同。 否则,与fullSensor的作用相同,允许使用四个方向。 自 API 级别 18 开始加入。
"locked" 锁定为当前方向,无论当前是什么方向。自 API 级别 18 开始加入。

注意: 一旦声明了横向或纵向值,则视为对 Activity 运行的方向有强制要求。 这时,此声明值将启用 Google Play 之类服务的过滤功能,于是应用程序就只能在支持所需方向的设备上使用。 比如,如果声明了“landscape”、“reverseLandscape”或者“sensorLandscape”, 则应用程序将只能在支持横向显示的设备上使用。 不过,你还可以用 <uses-feature> 元素来显式声明应用程序同时需要横向和纵向模式。 这样就会取消 Google Play(以及其他提供过滤的服务)的过滤行为, 即使设备仅支持特定的方向,系统也不会对是否安装应用程序进行控制了。

android:stateNotNeeded
未经保存状态, Activity 是否可被杀死并能够成功重启 —“true”表示可以不管之前的状态而被重启, “false” 表示需要保存之前的状态。 默认值是“false”。

通常,在为了腾出资源而临时关闭 Activity 之前,将会调用 onSaveInstanceState() 方法。该方法把当前 Activity 的状态存储到一个 Bundle 对象中,重新启动 Activity 时该 Bundle 对象将会被传给 onCreate() 。如果本属性设为“true”,则onSaveInstanceState() 可能就不会被调用,传入onCreate() 的将为 null 而非 Bundle — 就像第一次启动 Activity 一样。

本属性设为“true”将确保 Activity 能未经保存状态而被重启。 比如,显示主屏幕的 Activity 就利用本属性来保证由于某种原因崩溃时不会被清除。

android:taskAffinity
带有 affinity 的 Activity 所处的任务。 拥有相同 affinity 的 Activity 在概念上属于同一个任务(从用户的角度来看被视为同一个应用程序)。 任务的 affinity 取决于其根 Activity 的 affinity。

affinity 决定两件事情 — Activity 要重新归属于的任务(参阅 allowTaskReparenting 属性)和通过 FLAG_ACTIVITY_NEW_TASK 标志启动的 Activity 所处的任务。

默认情况下,同一个应用程序中的所有 Activity 都拥有相同的 affinity。 通过设置本属性,可以把 Activity 分为不同的组,甚至可以把不同应用程序的 Activity 放入同一个任务里。 要把 Activity 设置为不带 affinity ,也即不属于任何任务,只要将本属性设为空字符串即可。

如果未设置本属性,那么 Activity 将会继承应用程序的 affinity 设置(请参阅 <application> 元素的 taskAffinity 属性)。应用程序默认的 affinity 名称是由 <manifest> 元素设置的包名称。

android:theme
这是一个对样式资源的引用,该资源定义了 Activity 的整体主题(theme)。 Activity 将自动适用本属性设置的主题。(请参阅 setTheme() ),并可能会触发 Activity 的“启动”动画效果(为了让 Activity 看上去更美观协调)。

如果未设置本属性,Activity 将会继承作为全局设置的应用程序的主题 — 参见 <application> 元素的 theme 属性。如果应用程序也未设置该属性,则使用默认的系统主题。 详情请参阅样式和主题开发指南。

android:uiOptions
用于 Activity 用户界面的附加选项。

只能是以下值之一。

说明
"none" 没有附加选项。这是默认值。
"splitActionBarWhenNarrow" 当横向空间不足时(比如手机处于纵向模式时),在屏幕底部增加一个导航条,显示 ActionBar 中的 Action 项。Action Bar 将拆分为顶部和底部导航条,而不是只在屏幕顶部显示少量 Action 项。 这样就保证了合理的可用空间,不仅可容纳 Action Bar,还可以在顶部显示导航条和标题。 菜单项不会拆开在两个导航条显示,而一定是放在一起显示的。

关于 Action Bar 的更多信息,请参阅 Action Bar 开发指南。

本属性自 API 级别 14 开始引入。

android:windowSoftInputMode
Activity 主窗口如何与显示软键盘的窗口进行交互。 本属性影响两件事情:
  • 软键盘的状态 — 当 Activity 获得用户焦点时,是隐藏还是显示。
  • Activity 主窗口的调整 — 是否缩小窗口以便为软键盘腾出空间,或者在软键盘覆盖部分窗口时移动显示内容,以便显示当前的输入焦点。

本设置只能是下表所列值之一,或者是一个“state...”值与一个“adjust...”值的组合。 如果在每个组中设置多于一个的值 — 比如多个“state...”值 — 则会导致不可预知的结果。 每个值之间用竖线(|)分隔。 例如:

<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

以下值将覆盖主题中的相关设置(“stateUnspecified”和“adjustUnspecified”除外)

说明
"stateUnspecified" 软键盘的状态(隐藏或显示)未指定。由系统选择合适的状态,或由主题中的设置来决定。

这是软键盘的默认设置。

"stateUnchanged" 当 Activity 进入前台时,软键盘保持之前的状态不变,无论隐藏还是显示。
"stateHidden" 当用户选中本 Activity 时隐藏软键盘 — 也即用户确实是前进到本 Activity 时,而不是离开其他 Activity 回退过来时。
"stateAlwaysHidden" 当 Activity 的主窗口获得输入焦点时,总是隐藏软键盘。
"stateVisible" 一般情况下显示软键盘(当用户进入 Activity 主窗口时)。
"stateAlwaysVisible" 当用户选中本 Activity 时显示软键盘 — 也即用户确实是前进到本 Activity 时,而不是离开其他 Activity 回退过来时。
"adjustUnspecified" 未指定是否调整:Activity 主窗口是否要为软键盘留出空间而改变大小、还是在软键盘覆盖部分窗口时或移动显示内容以便显示当前输入焦点。 根据窗口中显示的内容是否具有可滚动布局的 View,系统将自动选择其中一种模式来处理。 如果是这类 View 则窗口将会缩小,因为滚动布局可以在较小的区域内显示完整的内容。

这是主窗口的默认设置。

"adjustResize" Activity 的主窗口总是会改变大小,以便为软键盘腾出屏幕空间。
"adjustPan" Activity 的主窗口不会为软键盘留出空间而改变大小,而是自动移动窗口里的显示内容,使得当前输入焦点不会被键盘挡住,用户也一直能够看见输入的内容。 一般情况下更推荐使用 adjustResize 模式,因为用户可能需要与被遮挡内容交互,进而关闭软键盘。

本属性自 API 级别 3 开始引入。

引入自:
noHistorywindowSoftInputMode 自 API 级别 3 开始引入,其余自 API 级别 1 开始引入。
参阅:
<application>
< activity-alias >

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。