- 语法
<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:canDisplayOnRemoteDevices=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["colorMode", "density", "fontScale", "fontWeightAdjustment", "grammaticalGender", "keyboard", "keyboardHidden", "layoutDirection", "locale", "mcc", "mnc", "navigation", "orientation", "screenLayout", "screenSize", "smallestScreenSize", "touchscreen", "uiMode"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] android:enabled=["true" | "false"] android:enabledOnBackInvokedCallback=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:immersive=["true" | "false"] android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance" | "singleInstancePerTask"] android:lockTaskMode=["normal" | "never" | "if_whitelisted" | "always"] android:maxRecents="integer" android:maxAspectRatio="float" android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:persistableMode=["persistRootOnly" | "persistAcrossReboots" | "persistNever"] android:permission="string" android:process="string" android:relinquishTaskIdentity=["true" | "false"] android:requireContentUriPermissionFromCaller=["none" | "read" | "readAndWrite" | "readOrWrite" | "write"] android:resizeableActivity=["true" | "false"] android:screenOrientation=["unspecified" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "userLandscape" | "userPortrait" | "sensor" | "fullSensor" | "nosensor" | "user" | "fullUser" | "locked"] android:showForAllUsers=["true" | "false"] android:stateNotNeeded=["true" | "false"] android:supportsPictureInPicture=["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>
<layout>
- 描述
- 声明一个活动(一个
Activity
子类),它实现了应用程序视觉用户界面的一部分。所有活动都必须在清单文件中由<activity>
元素表示。任何未在此处声明的活动都不会被系统识别,也永远不会运行。 - 属性
android:allowEmbedded
-
指示该活动可以作为另一个活动的嵌入式子活动启动,尤其是在子活动位于容器(例如另一个活动拥有的
Display
)中的情况下。例如,用于 Wear 自定义通知的活动声明此属性,以便 Wear 可以在其上下文流(位于另一个进程中)中显示该活动。此属性的默认值为
false
。 android:allowTaskReparenting
- 活动是否可以从启动它的任务移动到它具有关联性的任务(当该任务下次被调到最前面时)。如果可以移动,则为
"true"
;如果保留在启动它的任务中,则为"false"
。如果没有设置此属性,则
allowTaskReparenting
的相应<application>
元素属性的值将应用于该活动。默认值为"false"
。通常,启动活动时,它与启动它的活动的关联任务相关联,并且在其整个生命周期中都保留在该任务中。可以使用此属性强制将其重新指定父任务为其具有关联性的任务(当其当前任务不再显示时)。通常,这用于使应用程序的活动移动到与该应用程序关联的主任务。
例如,如果电子邮件包含指向网页的链接,则单击该链接会显示一个可以显示该页面的活动。该活动由浏览器应用程序定义,但作为电子邮件任务的一部分启动。如果将其重新指定父任务为浏览器任务,则当浏览器下次显示在最前面时,它会显示;当电子邮件任务再次显示在最前面时,它会消失。
活动的关联性由
taskAffinity
属性定义。任务的关联性是通过读取其根活动的关联性来确定的。因此,根据定义,根活动始终位于具有相同关联性的任务中。由于具有"singleTask"
或"singleInstance"
启动模式的活动只能位于任务的根部,因此重新指定父任务仅限于"standard"
和"singleTop"
模式。(另请参见launchMode
属性。) android:alwaysRetainTaskState
- 系统是否始终维护活动所在的任的任务状态。如果是,则为
"true"
;如果系统可以在某些情况下将任务重置为其初始状态,则为"false"
。默认值为"false"
。此属性仅对任务的根活动有意义。对于所有其他活动,它都会被忽略。通常,在用户从主屏幕重新选择该任务的某些情况下,系统会清除任务,删除根活动上方堆栈中的所有活动。通常,如果用户在一段时间(例如 30 分钟)内没有访问该任务,则会执行此操作。
但是,当此属性为
"true"
时,无论用户如何到达该任务,他们都会始终返回到其最后状态。这对于像 Web 浏览器这样的应用程序非常有用,因为浏览器有很多状态,例如多个打开的标签,用户不希望丢失这些状态。 android:autoRemoveFromRecents
- 使用此属性的活动启动的任务是否保留在最近使用的屏幕中,直到任务中的最后一个活动完成。如果为
true
,则该任务将自动从最近使用的屏幕中删除。这会覆盖调用者对FLAG_ACTIVITY_RETAIN_IN_RECENTS
的使用。它必须是布尔值,即"true"
或"false"
。 android:banner
- 一个可绘制资源,为其关联的项目提供扩展图形横幅。与
<activity>
标签一起使用,为特定活动提供默认横幅;与<application>
标签一起使用,为所有应用程序活动提供横幅。系统使用横幅在 Android TV 主屏幕上表示应用。由于横幅仅在主屏幕上显示,因此只有具有处理
CATEGORY_LEANBACK_LAUNCHER
意图的活动的应用程序才会指定它。此属性设置为对包含图像的可绘制资源的引用,例如
"@drawable/banner"
。没有默认横幅。更多信息,请参见《TV 应用入门》中的 提供主屏幕横幅。
android:canDisplayOnRemoteDevices
-
指示活动是否可以在远程设备上显示,远程设备可能运行 Android,也可能不运行 Android。它必须是布尔值,要么是
"true"
,要么是"false"
。此属性的默认值为
"true"
。 android:clearTaskOnLaunch
- 当从主屏幕重新启动活动时,是否会从任务中删除所有活动(根活动除外)。如果任务始终简化为其根活动,则为
"true"
;否则为"false"
。默认值为"false"
。此属性仅对启动新任务的活动(根活动)才有意义。对于任务中的所有其他活动,此属性将被忽略。当值为
"true"
时,每次用户启动任务时,无论他们在任务中最后做了什么,以及无论他们是否使用“返回”或“主页”按钮离开任务,他们都会被带到任务的根活动。当值为"false"
时,任务可能会在某些情况下被清除活动,但并非总是如此。更多信息,请参见alwaysRetainTaskState
属性。假设用户从主屏幕启动活动 P,然后从那里转到活动 Q。用户接下来点击“主页”,然后返回活动 P。通常情况下,用户会看到活动 Q,因为这是他们在 P 的任务中最后进行的操作。但是,如果 P 将此标志设置为
"true"
,则当用户从主屏幕启动活动 P 时,其顶部的所有活动(在本例中为 Q)都会被删除。因此,用户在返回任务时只会看到 P。如果此属性和
allowTaskReparenting
都为"true"
,则任何可以重新指定父级的活动都将移动到它们与其具有关联性的任务。然后删除其余活动。如果未设置
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
,则忽略此属性。 android:colorMode
指定活动的颜色模式。如果指定,可以是
hdr
或wideColorGamut
。如果为
hdr
,则请求如果设备支持,则以高动态范围显示活动。如果为
wideColorGamut
,则请求在兼容设备上以宽色域模式显示活动。在宽色域模式下,窗口可以在SRGB
色域之外进行渲染,以显示更鲜艳的色彩。如果设备不支持宽色域渲染,则此属性无效。有关以宽色域模式渲染的更多信息,请参见 使用宽色域内容增强图形。android:configChanges
- 列出活动本身处理的配置更改。在运行时发生配置更改时,活动默认情况下会关闭并重新启动,但是使用此属性声明配置可以防止活动重新启动。相反,活动将保持运行状态,并调用其
onConfigurationChanged()
方法。注意:仅在特殊情况下使用此属性来提高应用程序的性能和响应能力。更多信息,请参见 处理配置更改。
以下字符串是此属性的有效值。多个值用
|
分隔,例如"locale|navigation|orientation"
。值 描述 "colorMode"
屏幕的颜色模式功能(色域或动态范围)已更改。
注意:活动使用
colorMode
属性或在运行时请求的颜色模式不同于不同颜色模式的功能。活动更改其使用的颜色模式不会导致配置更改,因为显示器的颜色功能没有更改。"density"
显示密度发生变化,例如当用户指定不同的显示比例或不同的显示器现在处于活动状态时。
API 级别 24 中添加.
"fontScale"
字体缩放比例发生变化,例如当用户选择新的全局字体大小时。 "fontWeightAdjustment"
字体粗细增加量已更改。 "grammaticalGender"
语言的语法性别已更改。请参见 GrammaticalInflectionManager
。API 级别 34 中添加.
"keyboard"
键盘类型发生变化,例如当用户插入外部键盘时。 "keyboardHidden"
键盘辅助功能发生变化,例如当用户显示硬件键盘时。 "layoutDirection"
布局方向发生变化,例如从左到右 (LTR) 到右到左 (RTL)。
API 级别 17 中添加.
"locale"
区域设置发生变化,例如当用户选择文本显示的新语言时。 "mcc"
检测到更新 MCC 的 SIM 卡时,IMSI 移动国家代码 (MCC) 发生变化。 "mnc"
检测到更新 MNC 的 SIM 卡时,IMSI 移动网络代码 (MNC) 发生变化。 "navigation"
导航类型 (轨迹球或方向键) 发生变化。通常情况下,这种情况不会发生。 "orientation"
屏幕方向发生变化,例如当用户旋转设备时。
注意:如果您的应用程序面向 Android 3.2(API 级别 13)或更高版本,还应声明
"screenLayout"
和"screenSize"
配置,因为当设备在纵向和横向之间切换时,屏幕布局和屏幕尺寸可能会发生变化。"screenLayout"
屏幕布局发生变化,例如当不同的显示器变为活动状态时。 "screenSize"
当前可用屏幕尺寸发生变化。
这表示相对于当前纵横比的当前可用尺寸的变化,因此当用户在横向和纵向之间切换时,它会发生变化。
API 级别 13 中添加.
"smallestScreenSize"
物理屏幕尺寸发生变化。
这表示无论方向如何尺寸的变化,因此只有当实际物理屏幕尺寸变化时(例如切换到外部显示器)才会发生变化。此配置的变化对应于
smallestWidth
配置 的变化。API 级别 13 中添加.
"touchscreen"
触摸屏发生变化。通常情况下,这种情况不会发生。 "uiMode"
用户界面模式发生变化,例如当用户将设备放置在桌面或汽车底座中,或夜间模式发生变化时。有关不同 UI 模式的更多信息,请参见 UiModeManager
。API 级别 8 中添加.
所有这些配置更改都可能影响应用程序看到的资源值。因此,当调用
onConfigurationChanged()
时,通常需要再次检索所有资源(包括视图布局和可绘制对象),以正确处理更改。注意:要处理与 多窗口 相关的配置更改,请同时使用
"screenLayout"
和"smallestScreenSize"
。Android 7.0(API 级别 24)或更高版本支持多窗口。 android:directBootAware
活动是否支持直接启动,也就是说,它是否可以在用户解锁设备之前运行。
注意:在 直接启动 期间,应用程序中的活动只能访问存储在设备保护存储中的数据。
默认值为
"false"
。android:documentLaunchMode
- 指定每次启动活动时如何将活动的新实例添加到任务中。此属性允许用户在 最近使用屏幕 中显示来自同一应用程序的多个文档。
此属性有四个值,当用户使用应用程序打开文档时,会产生以下效果:
值 描述 "intoExisting"
系统搜索其基本意图的 ComponentName
和数据 URI 与启动意图匹配的任务。如果系统找到此类任务,则系统会清除该任务并重新启动,根活动将接收对onNewIntent(android.content.Intent)
的调用。如果系统找不到此类任务,则系统会创建一个新任务。"always"
即使文档已打开,活动也会为文档创建一个新任务。这与同时设置 FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
标志相同。"none"
活动不会为活动创建新任务。这是默认值,只有在设置 FLAG_ACTIVITY_NEW_TASK
时才会创建新任务。“最近使用”屏幕的处理方式与默认方式相同:它为应用显示单个任务,该任务从用户最后调用的任何活动恢复。"never"
即使意图包含 FLAG_ACTIVITY_NEW_DOCUMENT
,活动也不会启动到新的文档中。设置此选项将覆盖FLAG_ACTIVITY_NEW_DOCUMENT
和FLAG_ACTIVITY_MULTIPLE_TASK
标志的行为(如果在活动中设置了这两个标志中的任何一个),并且“最近使用”屏幕将为该应用显示单个任务,该任务从用户最后调用的任何活动恢复。注意:对于
"none"
和"never"
以外的值,活动定义为launchMode="standard"
。如果未指定此属性,则使用documentLaunchMode="none"
。 android:enabled
- 系统是否可以实例化活动。如果可以,则为
"true"
;否则为"false"
。默认值为"true"
。`
<application>
` 元素有其自己的 `enabled
` 属性,该属性应用于所有应用程序组件,包括活动。`<application>
` 和 `<activity>
` 属性都必须为 `"true"
` (默认情况下两者都是),系统才能实例化活动。如果两者中的任何一个为 `"false"
`,则无法实例化。 android:enableOnBackInvokedCallback
- 此标志允许您在活动级别选择预测系统动画。此行为使大型多活动应用程序迁移到预测式返回手势更易于管理。
设置 `
android:enableOnBackInvokedCallback=false
` 会关闭活动级别或应用程序级别的预测式返回动画(取决于您设置标签的位置),并指示系统忽略对 `OnBackInvokedCallback
` 平台 API 的调用。 android:excludeFromRecents
此活动启动的任务是否从 最近使用的屏幕 中排除。也就是说,当此活动是新任务的根活动时,此属性决定该任务是否出现在最近应用程序列表中。如果任务从列表中 *排除*,则为 `
"true"
`;如果 *包含*,则为 `"false"
`。默认值为 `"false"
`。android:exported
活动是否可以由其他应用程序的组件启动。
- 如果为 `
"true"
`,则任何应用程序都可以访问该活动,并且可以通过其确切的类名启动。 - 如果为 `
"false"
`,则该活动只能由同一应用程序的组件、具有相同用户 ID 的应用程序或特权系统组件启动。当没有意图过滤器时,这是默认值。
如果应用程序中的活动包含意图过滤器,请将此元素设置为 `
"true"
` 以允许其他应用程序启动它。例如,如果该活动是应用程序的主活动,并且包含 `category
` `android.intent.category.LAUNCHER
`。如果此元素设置为 `
"false"
`,并且应用程序尝试启动该活动,则系统会抛出 `ActivityNotFoundException
`。此属性并不是限制活动对其他应用程序公开的唯一方法。权限也用于限制可以调用该活动的外部实体。请参阅 `
permission
` 属性。- 如果为 `
android:finishOnTaskLaunch
- 当用户通过选择主屏幕上的任务重新启动其任务时,是否关闭活动的现有实例(根活动除外)。如果关闭,则为 `
"true"
`;如果不是,则为 `"false"
`。默认值为 `"false"
`。如果此属性和 `
allowTaskReparenting
` 都为 `"true"
`,则此属性优先于另一个属性。活动的相关性将被忽略。活动不会重新设置父级,而是被销毁。如果未设置
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
,则忽略此属性。 android:hardwareAccelerated
- 是否为此活动启用硬件加速渲染。如果启用,则为 `
"true"
`;如果不是,则为 `"false"
`。默认值为 `"false"
`。在 Android 3.0 及更高版本上,应用程序可以使用硬件加速的 OpenGL 渲染器来提高许多常用 2D 图形操作的性能。启用硬件加速渲染器后,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多数操作都会加速。
这将导致动画更流畅、滚动更流畅以及整体响应速度更快,即使对于没有明确使用框架的 OpenGL 库的应用程序也是如此。由于启用硬件加速所需的资源增加,您的应用程序会消耗更多 RAM。
并非所有 OpenGL 2D 操作都会加速。如果启用硬件加速渲染器,请测试您的应用程序是否可以在没有错误的情况下使用渲染器。
android:icon
表示活动的图标。当屏幕上需要活动的表示形式时,会向用户显示该图标。例如,启动任务的活动的图标会显示在启动器窗口中。图标通常与标签一起显示;有关标签的信息,请参阅
android:label
属性。此属性设置为对包含图像定义的可绘制资源的引用。如果未设置,则改为使用为整个应用程序指定的图标。有关更多信息,请参阅 `
<application>
` 元素的 `icon
` 属性。活动的图标(无论是在此处设置还是由 `
<application>
` 元素设置)也是所有活动意图过滤器的默认图标。有关更多信息,请参阅 `<intent-filter>
` 元素的 `icon
` 属性。android:immersive
- 设置当前活动的沉浸式模式设置。如果为 `
"true"
`,则 `ActivityInfo.flags
` 成员始终设置其 `FLAG_IMMERSIVE
` 位,即使使用 `setImmersive()
` 方法在运行时更改沉浸式模式也是如此。 android:label
活动的易于理解的标签。当向用户显示活动时,标签会显示在屏幕上。它通常与活动图标一起显示。如果未设置此属性,则改为使用为整个应用程序设置的标签。请参阅 `
<application>
` 元素的 `label
` 属性。活动的标签(无论是在此处设置还是由 `
<application>
` 元素设置)也是所有活动意图过滤器的默认标签。有关更多信息,请参阅 `<intent-filter>
` 元素的 `label
` 属性。标签设置为对字符串资源的引用,以便可以像用户界面中的其他字符串一样对其进行本地化。但是,为了方便您在开发应用程序时使用,它也可以设置为原始字符串。
android:launchMode
有关活动启动方式的说明。有五种模式,它们与 `
Intent
` 对象中的活动标志(`FLAG_ACTIVITY_*
` 常量)一起工作,以确定当活动被调用来处理意图时会发生什么。"standard"
"singleTop"
"singleTask"
"singleInstance"
"singleInstancePerTask"
默认模式为 `
"standard"
`。如下表所示,这些模式分为两大类,一类是 `
"standard"
` 和 `"singleTop"
` 活动,另一类是 `"singleTask"
`、`"singleInstance"
` 和 `"singleInstancePerTask"
` 活动。具有 `"standard"
` 或 `"singleTop"
` 启动模式的活动可以多次实例化。这些实例可以属于任何任务,并且可以位于活动任务中的任何位置。通常,它们会启动到调用 `
startActivity()
` 的任务中,除非 `Intent
` 对象包含 `FLAG_ACTIVITY_NEW_TASK
` 指令,在这种情况下,会选择不同的任务。有关更多信息,请参阅taskAffinity
属性。相反,`
"singleTask"
`、`"singleInstance"
` 和 `"singleInstancePerTask"
` 活动具有不同的行为。`"singleInstancePerTask"
` 始终位于活动任务的根目录。此外,设备一次只能保存一个 `"singleInstance"
` 活动实例,而当设置了 `FLAG_ACTIVITY_MULTIPLE_TASK
` 或 `FLAG_ACTIVITY_NEW_DOCUMENT
` 时,`"singleInstancePerTask"
` 活动可以在不同的任务中多次实例化。具有 `
"singleTask"
` 启动模式的活动结合了 `"singleInstance"
` 和 `"singleInstancePerTask"
` 的行为:活动可以多次实例化,并且可以位于具有相同 `taskAffinity
` 的任务中的任何位置。但是,设备只能保存一个任务来定位位于活动任务根目录的 `"singleTask"
` 活动。`
"standard"
` 和 `"singleTop"
` 模式在以下一个方面有所不同:每次 `"standard"
` 活动有新的意图时,都会创建一个新的类实例来响应该意图。每个实例都处理一个意图。类似地,也可以创建一个新的 `"singleTop"
` 活动实例来处理新的意图。但是,如果目标任务在其堆栈顶部已经有该活动的现有实例,则该实例将在 `
onNewIntent()
` 调用中接收新的意图。不会创建新的实例。否则(如果 `"singleTop"
` 活动的现有实例位于目标任务中,但不位于堆栈顶部,或者如果它位于堆栈顶部,但不位于目标任务中),则会创建一个新实例并将其推送到堆栈中。类似地,如果用户 向上导航 到当前堆栈上的活动,则行为由父活动的启动模式决定。如果父活动具有启动模式 `
singleTop
`(或 `up
` 意图包含 `FLAG_ACTIVITY_CLEAR_TOP
`),则父活动将被置于堆栈顶部,并且其状态将被保留。导航意图由父活动的 `
onNewIntent()
` 方法接收。如果父活动具有启动模式 `standard
`,并且 `up
` 意图不包含 `FLAG_ACTIVITY_CLEAR_TOP
`,则当前活动及其父活动都会从堆栈中弹出,并且会创建一个新的父活动实例来接收导航意图。"singleInstance"
模式与"singleTask"
和"singleInstancePerTask"
模式的区别仅在于一点:采用"singleTask"
或"singleInstancePerTask"
启动模式的 Activity 允许其他 Activity(必须是"standard"
和"singleTop"
Activity)成为其任务的一部分。另一方面,
"singleInstance"
Activity 不允许任何其他 Activity 成为其任务的一部分。它必须是任务中唯一的 Activity。如果它启动另一个 Activity,则该 Activity 将被分配到不同的任务,就像 Intent 中包含FLAG_ACTIVITY_NEW_TASK
一样。用例 启动模式 多个实例? 注释 大多数 Activity 的普通启动 "standard"
是 默认值。系统始终在目标任务中创建 Activity 的新实例,并将 Intent 路由到该实例。 "singleTop"
有条件的 如果 Activity 的实例已存在于目标任务的顶部,则系统会通过调用其 onNewIntent()
方法将 Intent 路由到该实例,而不是创建 Activity 的新实例。专用启动
(不推荐用于一般用途)"singleTask"
有条件的 系统会在新任务的根目录创建 Activity,或在具有相同关联性的现有任务中找到 Activity。如果 Activity 的实例已存在并且位于任务的根目录,则系统会通过调用其 onNewIntent()
方法将 Intent 路由到现有实例,而不是创建一个新的实例。"singleInstance"
否 与 "singleTask"
相同,只是系统不会将任何其他 Activity 启动到持有该实例的任务中。该 Activity 始终是其任务中唯一且唯一的成员。"singleInstancePerTask"
有条件的 该 Activity 只能作为任务的根 Activity 运行(创建任务的第一个 Activity),因此任务中只有一个该 Activity 的实例。但是,该 Activity 可以在不同的任务中多次实例化。 如上表所示,
"standard"
是默认模式,适用于大多数类型的 Activity。"singleTop"
也是许多类型的 Activity 的常用且有用的启动模式。其他模式,"singleTask"
、"singleInstance"
和"singleInstancePerTask"
,不适用于大多数应用程序。它们会导致用户不熟悉的交互模型,并且与大多数其他应用程序有很大不同。无论您选择哪种启动模式,请务必测试 Activity 在启动期间以及使用后退按钮从其他 Activity 和任务导航回 Activity 时的可用性。
有关启动模式及其与
Intent
标志交互的更多信息,请参阅 任务和返回堆栈。android:lockTaskMode
- 确定设备在 锁定任务模式 下运行时系统如何呈现此 Activity。
Android 可以以沉浸式、类似信息亭的方式运行任务,称为锁定任务模式。当系统在锁定任务模式下运行时,设备用户通常无法查看通知、访问未列入允许列表的应用或返回主屏幕,除非主屏幕应用已列入允许列表。
只有设备策略控制器 (DPC) 列入允许列表的应用才能在系统处于锁定任务模式时运行。但是,系统和 特权应用 可以在锁定任务模式下运行,而无需列入允许列表。
该值可以是以下任何一个
R.attr.lockTaskMode
字符串值值 描述 "normal"
默认值。这是默认值。任务不会以锁定任务模式启动,但可以通过调用 startLockTask()
将其置于锁定任务模式。"never"
任务不会以
lockTask
模式启动,并且设备用户无法从“最近使用的应用”屏幕固定这些任务。注意:此模式仅适用于系统和特权应用程序。具有此值的非特权应用将被视为
normal
。"if_whitelisted"
如果 DPC 使用 DevicePolicyManager.setLockTaskPackages()
授权此软件包,则此模式与always
相同,只是如果 Activity 是最后一个锁定的任务,则需要在能够完成之前调用stopLockTask()
。如果 DPC 未授权此软件包,则此模式与normal
相同。"always"
以该 Activity 为根的任务始终以锁定任务模式启动。如果系统在启动此任务时已处于锁定任务模式,则新任务将启动在当前任务之上。以这种模式启动的任务可以通过调用
finish()
退出锁定任务模式。注意:此模式仅适用于系统和特权应用程序。具有此值的非特权应用将被视为
normal
。此属性是在 API 级别 23 中引入的。
android:maxRecents
- 在 “最近使用的应用”屏幕 上以该 Activity 为根的任务的最大数量。达到此条目数量时,系统会从“最近使用的应用”屏幕中删除使用最少的实例。有效值是从 1 到 50 的整数,或者在低内存设备上是从 1 到 25 的整数。零无效。默认值为 16。
android:maxAspectRatio
Activity 支持的最大纵横比。如果应用在纵横比更宽的设备上运行,系统会自动为应用添加黑边,留下屏幕的一部分未被使用,以便应用可以以其指定的最大纵横比运行。
最大纵横比表示为设备较长尺寸除以较短尺寸的商的十进制形式。例如,如果最大纵横比为 7:3,则将此属性的值设置为 2.33。
在非可穿戴设备上,此属性的值需要大于或等于 1.33。在可穿戴设备上,它必须大于或等于 1.0。否则,系统将忽略设置的值。
注意:如果 Activity 将
resizeableActivity
设置为 true,则会忽略此属性,因为这意味着您的 Activity 支持任何尺寸。有关此属性的更多信息,请参阅 声明最大纵横比。
android:multiprocess
- Activity 的实例是否可以启动到启动它的组件的进程中。如果可以,则为
"true"
;如果不可以,则为"false"
。默认值为"false"
。通常,Activity 的新实例将启动到定义它的应用程序的进程中,因此 Activity 的所有实例都在同一个进程中运行。但是,如果此标志设置为
"true"
,则 Activity 的实例可以在多个进程中运行,从而允许系统在使用实例的任何位置创建实例(前提是权限允许——这种情况几乎从不必要或不可取)。 android:name
- 实现 Activity 的类的名称,它是
Activity
的子类。属性值通常是完全限定的类名,例如"com.example.project.ExtracurricularActivity"
。但是,作为简写,如果名称的第一个字符是句点,例如".ExtracurricularActivity"
,则将其附加到build.gradle
文件中指定的 命名空间。发布应用程序后,请勿更改此名称,除非您将
android:exported="false"
。没有默认值。必须指定名称。 android:noHistory
- 当用户从 Activity 导航离开且它不再显示在屏幕上时,是否通过调用其
finish()
方法将其从 Activity 堆栈中移除并完成。如果已完成,则为"true"
;如果未完成,则为"false"
。默认值为"false"
。值为
"true"
表示 Activity 不会留下历史痕迹。它不会保留在任务的 Activity 堆栈中,因此用户无法返回到它。在这种情况下,如果从该 Activity 启动另一个 Activity 以获取结果,则永远不会调用onActivityResult()
。此属性是在 API 级别 3 中引入的。
android:parentActivityName
- Activity 的逻辑父级的类名。此处的名称必须与提供给相应
<activity>
元素的android:name
属性的类名匹配。系统读取此属性以确定当用户点击操作栏中的向上按钮时要启动哪个 Activity。系统还可以使用此信息来合成具有
TaskStackBuilder
的 Activity 返回堆栈。要支持 API 级别 4-16,您还可以使用
<meta-data>
元素声明父 Activity,该元素为"android.support.PARENT_ACTIVITY"
指定一个值。<activity android:name="com.example.app.ChildActivity" android:label="@string/title_child_activity" android:parentActivityName="com.example.app.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 以支持向上导航的更多信息,请阅读 提供向上导航。
此属性是在 API 级别 16 中引入的。
android:persistableMode
定义在设备重启后,Activity 的实例如何在包含的任务中保留。
如果任务的根 Activity 将此属性的值设置为
persistRootOnly
,则只保留根 Activity。否则,将检查任务 返回堆栈 中较高的 Activity;将此属性的值设置为persistAcrossReboots
的任何这些 Activity 都将被保留。如果使用此属性,则必须将其值设置为以下值之一
值 描述 persistRootOnly
默认值。系统重启时,会保留 Activity 任务,但仅使用根 Activity 的启动 Intent。
当应用的启动 Intent 加载应用的根 Activity 时,Activity 不会接收
PersistableBundle
对象。因此,不要使用onSaveInstanceState()
来保留应用根 Activity 在设备重启后的状态。注意:此属性值仅当应用的根 Activity 上设置时才会影响应用的行为。
persistAcrossReboots
此 Activity 的状态将被保留,以及在返回栈中位于其上方的每个 Activity 的状态,这些 Activity 都有其自己的
persistableMode
属性设置为persistAcrossReboots
。如果 Activity 没有将persistableMode
属性设置为persistAcrossReboots
,或者如果它使用Intent.FLAG_ACTIVITY_NEW_DOCUMENT
标志启动,则该 Activity 以及返回栈中位于其上方的所有 Activity 都不会被保留。当 Intent 加载一个
persistableMode
属性设置为persistAcrossReboots
的 Activity 时,该 Activity 会在其onCreate()
方法中接收一个PersistableBundle
对象。因此,只要其persistableMode
属性设置为persistAcrossReboots
,就可以使用onSaveInstanceState()
来保留 Activity 在设备重启后的状态。注意:即使此属性值设置在应用根 Activity 以外的 Activity 上,也会影响应用的行为。
persistNever
Activity 的状态不会被保留。
注意:此属性值仅当应用的根 Activity 上设置时才会影响应用的行为。
此属性在 API 级别 21 中引入。
android:permission
- 客户端必须拥有的权限名称,才能启动 Activity 或以其他方式使其响应 Intent。如果
startActivity()
或startActivityForResult()
的调用者未被授予指定的权限,则其 Intent 不会传递给 Activity。如果未设置此属性,则
<application>
元素的permission
属性设置的权限将应用于 Activity。如果两个属性都没有设置,则 Activity 不会受到权限保护。 android:process
Activity 运行所在的进程名称。通常,应用程序的所有组件都在为应用程序创建的默认进程名称中运行,您不需要使用此属性。但如有必要,您可以使用此属性覆盖默认进程名称,从而允许您将应用程序组件分散到多个进程中。
如果分配给此属性的名称以冒号(
:
)开头,则在需要时会创建一个属于应用程序的私有新进程,并且 Activity 将在此进程中运行。如果进程名称以小写字母开头,则 Activity 将在该名称的全局进程中运行,前提是它有权这样做。这允许不同应用程序中的组件共享一个进程,从而减少资源使用。
<application>
元素的process
属性可以为所有组件设置不同的默认进程名称。android:relinquishTaskIdentity
Activity 是否将其任务标识符让给任务堆栈中位于其上方的 Activity。根 Activity 具有此属性设置为
"true"
的任务会将其基本Intent
替换为任务中下一个 Activity 的基本Intent
。如果下一个 Activity 也将此属性设置为
"true"
,则它会将其基本Intent
传递给它在同一任务中启动的任何 Activity。这将对每个 Activity 继续进行,直到遇到将此属性设置为"false"
的 Activity 为止。默认值为"false"
。此属性设置为
"true"
还允许 Activity 使用ActivityManager.TaskDescription
在最近使用的应用屏幕中更改标签、颜色和图标。android:requireContentUriPermissionFromCaller
-
指定在传递内容 URI 时启动此 Activity 所需的权限。默认值为
none
,表示不需要特定权限。设置此属性会根据调用者的权限限制 Activity 的调用。如果调用者没有所需的权限,则 Activity 启动将通过SecurityException
被拒绝。请注意,此强制执行适用于
Intent.getData()
、Intent.EXTRA_STREAM
和Intent.getClipData()
中的内容 URI。可以是字符串值,使用 '\\;' 来转义字符,例如 '\\n' 或 '\\uxxxx' 用于 unicode 字符;
必须是以下常量值之一。
常量 值 描述 none 0 默认值,不需要特定权限。 read 1 强制调用者对传递的内容 URI 具有读取访问权限。 readAndWrite 4 强制调用者对传递的内容 URI 具有读写访问权限。 readOrWrite 3 强制调用者对传递的内容 URI 具有读取或写入访问权限。 write 2 强制调用者对传递的内容 URI 具有写入访问权限。 android:resizeableActivity
-
指定应用程序是否支持多窗口模式。您可以在
<activity>
或<application>
元素中设置此属性。如果将此属性设置为
"true"
,则用户可以在分屏和自由形式模式下启动 Activity。如果将属性设置为"false"
,则无法测试或优化应用程序以适应多窗口环境。系统仍然可以应用兼容性模式将 Activity 置于多窗口模式。将此属性设置为
"false"
并不能保证屏幕上没有其他处于多窗口模式的应用程序可见,例如画中画或其他显示器。因此,设置此标志并不意味着您的应用程序具有独占资源访问权限。如果您的应用程序的目标 API 级别为 24 或更高,并且您未为此属性指定值,则该属性的值默认为
"true"
。如果您的应用的目标 API 级别为 31 或更高,则此属性在小型屏幕和大型屏幕上的工作方式有所不同。
- 大型屏幕 (sw >= 600dp):所有应用程序都支持多窗口模式。该属性指示应用程序是否可以调整大小,而不是应用程序是否支持多窗口模式。如果
resizeableActivity="false"
,则在必要时将应用程序置于兼容性模式以符合显示尺寸。 - 小型屏幕 (sw < 600dp):如果
resizeableActivity="true"
并且 Activity 的最小宽度和最小高度符合多窗口要求,则应用程序支持多窗口模式。如果resizeableActivity="false"
,则无论 Activity 的最小宽度和高度如何,应用程序都不支持多窗口模式。
注意:设备制造商可以覆盖 API 级别 31 的行为。
此属性在 API 级别 24 中添加。
注意:任务的根 Activity 值将应用于在任务中启动的所有其他 Activity。也就是说,如果任务的根 Activity 可调整大小,则系统会将任务中的所有其他 Activity 视为可调整大小。如果根 Activity 不可调整大小,则任务中的其他 Activity 也不可调整大小。
- 大型屏幕 (sw >= 600dp):所有应用程序都支持多窗口模式。该属性指示应用程序是否可以调整大小,而不是应用程序是否支持多窗口模式。如果
android:screenOrientation
Activity 的请求方向。
当 Activity 填充整个屏幕时,请求的方向充当建议,以更改该屏幕上的方向以匹配请求的值。这可能导致方向与屏幕在空间中的物理方向不同,要求用户旋转设备才能继续使用应用程序。在Android 12 (API 级别 31) 及更高版本中,设备制造商可以配置各个设备屏幕(例如可折叠设备的平板电脑大小的屏幕)以忽略此建议,并强制 Activity 在用户的首选设备方向内使用 letterboxing。这使得 Activity 的方向与请求的方向相匹配,而无需用户物理旋转设备。
在多窗口模式下,请求的方向不会充当整体方向的建议。如果 Activity 为letterboxed,则请求的方向会影响应用于 Activity 的 letterboxing。
该值可以是以下字符串中的任何一个
"unspecified"
默认值。系统选择方向。它使用的策略以及因此在特定上下文中做出的选择可能因设备而异。 "behind"
与 Activity 堆栈中紧邻其下方的 Activity 的方向相同。 "landscape"
横向方向(显示屏宽度大于高度)。 "portrait"
纵向方向(显示屏高度大于宽度)。 "reverseLandscape"
与普通横向方向相反的横向方向。在 API 级别 9 中添加。 "reversePortrait"
与普通纵向方向相反的纵向方向。在 API 级别 9 中添加。 "sensorLandscape"
横向方向,但可以根据设备传感器是普通横向方向还是反向横向方向。即使用户已锁定基于传感器的旋转,也会使用传感器。在 API 级别 9 中添加。 "sensorPortrait"
纵向方向,但可以根据设备传感器是普通纵向方向还是反向纵向方向。即使用户已锁定基于传感器的旋转,也会使用传感器。但是,根据设备配置,可能不允许倒置旋转。在 API 级别 9 中添加。 "userLandscape"
横向屏幕方向,但根据设备传感器和用户偏好,可以是正常横向或反向横向。API 级别 18 中添加。 "userPortrait"
纵向屏幕方向,但根据设备传感器和用户偏好,可以是正常纵向或反向纵向。但是,根据设备配置,可能不允许倒置旋转。API 级别 18 中添加。 "sensor"
设备方向传感器确定方向。显示屏的方向取决于用户如何握持设备。当用户旋转设备时,它会发生变化。但是,默认情况下,某些设备不会旋转到所有四个可能的方位。要使用所有四个方位,请使用 "fullSensor"
。即使用户锁定了基于传感器的旋转,也会使用传感器。"fullSensor"
设备方向传感器确定任何四个方向的屏幕方向。这类似于 "sensor"
,不同之处在于它允许任何四个可能的屏幕方向,而不管设备通常支持什么。例如,某些设备通常不使用反向纵向或反向横向,但这启用了这些方向。API 级别 9 中添加。"nosensor"
方向的确定不参考物理方向传感器。传感器被忽略,因此显示屏不会根据用户移动设备的方式旋转。 "user"
用户当前的首选方向。 "fullUser"
如果用户锁定了基于传感器的旋转,则其行为与 user
相同,否则其行为与fullSensor
相同,并允许任何四个可能的屏幕方向。API 级别 18 中添加。"locked"
将方向锁定在其当前旋转状态,无论是什么状态。API 级别 18 中添加。 注意:当声明横向或纵向值之一时,它被视为活动运行方向的硬性要求。声明的值可启用 Google Play 等服务的筛选,因此您的应用程序仅适用于支持活动所需方向的设备。例如,如果您声明
"landscape"
、"reverseLandscape"
或"sensorLandscape"
之一,则您的应用程序仅适用于支持横向方向的设备。还要使用
<uses-feature>
元素显式声明您的应用程序需要纵向或横向方向,例如<uses-feature android:name="android.hardware.screen.portrait"/>
。这是 Google Play 和其他支持它的服务提供的筛选行为,平台本身并不控制当设备仅支持某些方向时您的应用是否可以安装。android:showForAllUsers
-
当设备的当前用户与启动活动的用户的不同时,是否显示活动。您可以将此属性设置为字面值,例如
"true"
或"false"
,也可以将属性设置为包含布尔值的资源或主题属性。此属性是在 API 级别 23 中添加的。
android:stateNotNeeded
- 活动是否可以在不保存其状态的情况下终止并成功重启。如果可以在不参考其先前状态的情况下重启,则为
"true"
;如果需要其先前状态,则为"false"
。默认值为"false"
。通常,在临时关闭活动以节省资源之前,会调用其
onSaveInstanceState()
方法。此方法将活动的当前状态存储在Bundle
对象中,然后在活动重启时传递给onCreate()
。如果此属性设置为"true"
,则可能不会调用onSaveInstanceState()
,并且onCreate()
传递null
而不是Bundle
,就像活动第一次启动时一样。"true"
设置意味着活动可以在没有保留状态的情况下重启。例如,显示主屏幕的活动使用此设置来确保如果它因某种原因崩溃,它不会被删除。 android:supportsPictureInPicture
-
指定活动是否支持画中画显示。
android:taskAffinity
活动对其具有关联的任务。从用户的角度来看,具有相同关联的活动在概念上属于同一任务,属于同一“应用程序”。任务的关联由其根活动的关联决定。
关联决定两件事:活动重新设置父级的任务(请参阅
allowTaskReparenting
属性)以及当活动使用FLAG_ACTIVITY_NEW_TASK
标志启动时所在的任务。默认情况下,应用程序中的所有活动都具有相同的关联。您可以设置此属性以对它们进行不同的分组,甚至将定义在不同应用程序中的活动放在同一任务中。要指定活动不具有任何任务的关联,请将其设置为空字符串。
如果未设置此属性,则活动将继承为应用程序设置的关联。请参阅
<application>
元素的taskAffinity
属性。应用程序的默认关联名称是在build.gradle
文件中设置的命名空间。android:theme
- 对定义活动整体主题的样式资源的引用。这会自动将活动的上下文设置为使用此
theme
,并且还可能在启动活动之前导致“启动”动画,以更好地匹配活动的实际外观。如果未设置此属性,则活动将继承为整个应用程序设置的主题,来自
<application>
元素的theme
属性。如果该属性也未设置,则使用默认系统主题。有关更多信息,请参阅样式和主题。 android:uiOptions
活动 UI 的额外选项。必须是以下值之一。
值 描述 "none"
没有额外的 UI 选项。这是默认设置。 "splitActionBarWhenNarrow"
当水平空间受限时(例如,在手机的纵向模式下),在屏幕底部添加一个栏来显示应用栏(也称为操作栏)中的操作项。应用栏不会在屏幕顶部显示少量操作项,而是被分成顶部的导航部分和底部的操作项栏。这意味着不仅为操作项提供了合理的可用空间,而且为顶部的导航和标题元素也提供了合理的可用空间。菜单项不会拆分到两个栏中。它们始终一起出现。 有关应用栏的更多信息,请参阅添加应用栏。
此属性是在 API 级别 14 中添加的。
android:windowSoftInputMode
- 活动的窗口如何与包含屏幕软键盘的窗口交互。此属性的设置会影响两件事:
- 当活动成为用户关注的焦点时,软键盘是隐藏还是可见。
- 活动的主窗口是否调整为较小尺寸以腾出空间放置软键盘,或者其内容是否平移以在窗口的一部分被软键盘覆盖时使当前焦点可见。
设置必须是下表中列出的值之一,或者是一个
"state..."
值加上一个"adjust..."
值的组合。在任一组中设置多个值(例如多个"state..."
值)的结果未定义。各个值用竖线(|
)分隔,如下例所示:<activity android:windowSoftInputMode="stateVisible|adjustResize" ... >
此处设置的值(
"stateUnspecified"
和"adjustUnspecified"
除外)会覆盖主题中设置的值。值 描述 "stateUnspecified"
软键盘是隐藏还是可见未指定。系统会选择适当的状态或依赖于主题中的设置。 这是软键盘行为的默认设置。
"stateUnchanged"
当活动显示时,软键盘保持其上次可见或隐藏的状态。 "stateHidden"
当用户选择活动时,软键盘将被隐藏——也就是说,当用户肯定地向前导航到活动时,而不是在离开另一个活动时向后返回。 "stateAlwaysHidden"
当活动的窗口获得输入焦点时,软键盘始终隐藏。 "stateVisible"
当用户选择活动时,软键盘将变为可见——也就是说,当用户肯定地向前导航到活动时,而不是在离开另一个活动时向后返回。 "stateAlwaysVisible"
当窗口接收到输入焦点时,软键盘可见。 “adjustUnspecified”
活动的主窗口是否会调整大小以腾出空间给软键盘,或者窗口内容是否会平移以使当前焦点在屏幕上可见,这是未指定的。系统会根据窗口内容是否有任何可以滚动其内容的布局视图来自动选择其中一种模式。如果存在这样的视图,则窗口会调整大小,假设滚动可以使窗口的所有内容在较小的区域内可见。 这是主窗口行为的默认设置。
“adjustResize”
活动的窗口总是调整大小以腾出空间给屏幕上的软键盘。 “adjustPan”
活动的窗口不会调整大小以腾出空间给软键盘。相反,窗口的内容会自动平移,以便当前焦点永远不会被键盘遮挡,用户始终可以看到他们正在输入的内容。这通常不如调整大小好,因为用户可能需要关闭软键盘才能访问并与窗口被遮挡的部分进行交互。 此属性是在 API 级别 3 中引入的。
- 引入于
- API 级别 1(所有属性,除了
noHistory
和windowSoftInputMode
,它们是在 API 级别 3 中添加的)。 - 另请参阅
<application>
<activity-alias>
本页面的内容和代码示例受内容许可中描述的许可的约束。Java 和 OpenJDK 是 Oracle 和/或其关联公司的商标或注册商标。
上次更新时间:2024-07-24 UTC。
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的信息","missingTheInformationINeed","thumb-down"],["过于复杂/步骤过多","tooComplicatedTooManySteps","thumb-down"],["已过期","outOfDate","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新时间:2024-07-24 UTC."],[],[]]