Android復習(三)清單文件中的元素——> activity
轉自: https://developer.android.google.cn/guide/topics/manifest/activity-element
<activity>
- 語法:
-
<activity android:allowEmbedded=["true" | "false"] android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:autoRemoveFromRecents=["true" | "false"] android:banner="drawable resource" android:clearTaskOnLaunch=["true" | "false"] android:colorMode=[ "hdr" | "wideColorGamut"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "density", "screenSize", "smallestScreenSize"] android:directBootAware=["true" | "false"] android:documentLaunchMode=["intoExisting" | "always" | "none" | "never"] 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:immersive=["true" | "false"] android:label="string resource" android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance"] 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: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子類)。必須用清單文件中的<activity>元素表示所有 Activity。系統不會識別和運行任何未進行聲明的 Activity。 - 屬性:
android:allowEmbedded- 表示該 Activity 可作為其他 Activity 的嵌入式子項啟動。此屬性尤其適用于子項位于其他 Activity 所擁有容器(如 Display)中的情況。例如,用于 Wear 自定義通知的 Activity 必須聲明此屬性,以便 Wear 在其位于另一進程內的上下文流中顯示 Activity。
該屬性的默認值為
false。 android:allowTaskReparenting- 當下一次將啟動 Activity 的任務轉至前臺時,Activity 是否能從該任務轉移至與其有相似性的任務 —“
true”表示可以轉移,“false”表示仍須留在啟動它的任務處。如果未設置該屬性,則對 Activity 應用由
<application>元素的相應allowTaskReparenting屬性所設置的值。默認值為“false”。正常情況下,Activity 啟動時會與啟動它的任務關聯,并在其整個生命周期中一直留在該任務處。當不再顯示現有任務時,您可以使用該屬性強制 Activity 將其父項更改為與其有相似性的任務。該屬性通常用于將應用的 Activity 轉移至與該應用關聯的主任務。
例如,如果電子郵件消息包含網頁鏈接,則點擊該鏈接會調出可顯示該網頁的 Activity。該 Activity 由瀏覽器應用定義,但作為電子郵件任務的一部分啟動。如果將該 Activity 的父項更改為瀏覽器任務,則它會在瀏覽器下一次轉至前臺時顯示,在電子郵件任務再次轉至前臺時消失。
Activity 的相似性由
taskAffinity屬性定義。通過讀取任務根 Activity 的相似性即可確定任務的相似性。因此,按照定義,根 Activity 始終位于具有同一相似性的任務中。由于具有“singleTask”或“singleInstance”啟動模式的 Activity 只能位于任務的根,因此更改父項僅限于“standard”和“singleTop”模式。(另請參閱launchMode屬性。) android:alwaysRetainTaskState- 系統是否始終保持 Activity 所在任務的狀態 —“
true”表示是,“false”表示允許系統在特定情況下將任務重置到其初始狀態。默認值為“false”。該屬性只對任務的根 Activity 有意義;所有其他 Activity 均可忽略該屬性。正常情況下,當用戶從主屏幕重新選擇某個任務時,系統會在特定情況下清除該任務(從根 Activity 上的堆棧中移除所有 Activity)。通常,如果用戶在一段時間(如 30 分鐘)內未訪問任務,系統會執行此操作。
不過,如果該屬性的值是“
true”,則無論用戶如何返回任務,該任務始終會顯示最后一次的狀態。例如,該屬性非常適用于網絡瀏覽器這類應用,因為其中存在大量用戶不愿丟失的狀態(如多個打開的標簽)。 android:autoRemoveFromRecents- 由具有該屬性的 Activity 啟動的任務是否一直保留在概覽屏幕中,直至任務中的最后一個 Activity 完成為止。若為
true,則自動從概覽屏幕中移除任務。它會替換調用方使用的FLAG_ACTIVITY_RETAIN_IN_RECENTS。它必須是布爾值“true”或“false”。 android:banner- 一種為其關聯項提供擴展圖形化橫幅的可繪制資源??膳c
<activity>標記聯用,為特定 Activity 提供默認橫幅;也可與<application>標記聯用,為所有應用 Activity 提供橫幅。系統使用橫幅,以在 Android TV 主屏幕中表示應用。由于橫幅只顯示在主屏幕中,因此只有 Activity 可處理
CATEGORY_LEANBACK_LAUNCHERIntent 的應用才能指定該橫幅。必須將該屬性設置為對包含圖像的可繪制資源的引用(例如
"@drawable/banner")。沒有默認橫幅。如需了解詳細信息,請參閱“電視應用入門指南”中的提供主屏幕橫幅。
android:clearTaskOnLaunch- 每當從主屏幕重新啟動任務時,是否都從該任務中移除根 Activity 之外的所有 Activity —“
true”表示始終將任務清除至只剩其根 Activity;“false”表示不清除。默認值為“false”。該屬性只對啟動新任務的 Activity(根 Activity)有意義;任務中的所有其他 Activity 均可忽略該屬性。若值為“
true”,則每次當用戶再次啟動任務時,無論用戶最后在任務中正在執行哪個 Activity,也無論用戶是使用返回還是主屏幕按鈕離開,系統都會將用戶轉至任務的根 Activity。當值為“false”時,可在某些情況下清除任務中的 Activity(請參閱alwaysRetainTaskState屬性),但也有例外。例如,假設用戶從主屏幕啟動 Activity P,然后從該處轉到 Activity Q。接著,該用戶按下主屏幕按鈕,然后返回到 Activity P。正常情況下,用戶將看到 Activity Q,因為這是其最后在 P 的任務中所執行的 Activity。不過,如果 P 將此標志設置為“
true”,則當用戶按下主屏幕將任務轉入后臺時,系統會移除 P 上方的所有 Activity(在本例中為 Q)。因此用戶在返回任務時只會看到 P。如果該屬性和
allowTaskReparenting的值均為“true”,則如上所述,任何可更改父項的 Activity 都將轉移至與其有相似性的任務;而其余 Activity 隨即會被移除。 android:colorMode-
請求在兼容設備上以廣色域模式顯示 Activity。在廣色域模式下,窗口可以在
SRGB色域之外進行渲染,從而顯示更鮮艷的色彩。如果設備不支持廣色域渲染,則此屬性無效。如需了解在廣色域模式下進行渲染的詳細信息,請參閱使用廣色域內容增強圖形。 android:configChanges- 列出 Activity 將自行處理的配置變更。在運行時發生配置變更時,默認情況下會關閉 Activity 并將其重啟,但使用該屬性聲明配置將阻止 Activity 重啟。相反,Activity 會保持運行狀態,并且系統會調用其
方法。onConfigurationChanged()請注意:應避免使用該屬性,并且只應在萬不得已的情況下使用。如需了解有關如何正確處理配置變更所致重啟的詳細信息,請閱讀處理運行時變更。
任何或所有下列字符串均是該屬性的有效值。若有多個值,則使用“
|”進行分隔,例如“locale|navigation|orientation”。值 描述 “ density”顯示密度發生變更 — 用戶可能已指定不同的顯示比例,或者有不同的顯示現處于活躍狀態。 此項為 API 級別 24 中的新增配置。
“ fontScale”字體縮放系數發生變更 — 用戶已選擇新的全局字號。 “ keyboard”鍵盤類型發生變更 — 例如,用戶插入外置鍵盤。 “ keyboardHidden”鍵盤無障礙功能發生變更 — 例如,用戶顯示硬鍵盤。 “ layoutDirection”布局方向發生變更 — 例如,自從左至右 (LTR) 更改為從右至左 (RTL)。 此項為 API 級別 17 中的新增配置。
“ locale”語言區域發生變更 — 用戶已為文本選擇新的顯示語言。 “ mcc”IMSI 移動設備國家/地區代碼 (MCC) 發生變更 — 檢測到 SIM 并更新 MCC。 “ mnc”IMSI 移動設備網絡代碼 (MNC) 發生變更 — 檢測到 SIM 并更新 MNC。 “ navigation”導航類型(軌跡球/方向鍵)發生變更。(這種情況通常不會發生。) “ orientation”屏幕方向發生變更 — 用戶旋轉設備。 請注意:如果應用面向 Android 3.2(API 級別 13)或更高版本的系統,則還應聲明
"screenSize"配置,因為當設備在橫向與縱向之間切換時,該配置也會發生變更。“ screenLayout”屏幕布局發生變更 — 不同的顯示現可能處于活躍狀態。 “ screenSize”當前可用屏幕尺寸發生變更。 該值表示當前可用尺寸相對于當前縱橫比的變更,當用戶在橫向與縱向之間切換時,它便會發生變更。
此項為 API 級別 13 中的新增配置。
“ smallestScreenSize”物理屏幕尺寸發生變更。 該值表示與方向無關的尺寸變更,因此它只有在實際物理屏幕尺寸發生變更(如切換到外部顯示器)時才會變化。對此配置所作變更對應 smallestWidth 配置的變化。
此項為 API 級別 13 中的新增配置。
“ touchscreen”觸摸屏發生變更。(這種情況通常不會發生。) “ uiMode”界面模式發生變更 — 用戶已將設備置于桌面或車載基座,或者夜間模式發生變更。如需了解有關不同界面模式的更多信息,請參閱 UiModeManager。此項為 API 級別 8 中的新增配置。
所有這些配置變更都可能影響應用所看到的資源值。因此,調用
時,通常有必要再次檢索所有資源(包括視圖布局、可繪制對象等),以正確處理變更。onConfigurationChanged()請注意:如要處理所有多窗口模式相關的配置變更,請使用
"screenLayout"和"smallestScreenSize"。Android 7.0(API 級別 24)或更高版本的系統支持多窗口模式。 android:directBootAware-
Activity 是否支持直接啟動,即其是否可以在用戶解鎖設備之前運行。
請注意:在直接啟動期間,應用中的 Activity 僅可訪問存儲在設備保護存儲區的數據。
默認值為
"false"。 android:documentLaunchMode- 指定每次啟動任務時,應如何向其添加新的 Activity 實例。該屬性允許用戶讓多個來自同一應用的文檔出現在概覽屏幕中。
該屬性有四個值,會在用戶使用該應用打開文檔時產生以下效果:
值 描述 “ intoExisting”系統會搜索基本 Intent 的 ComponentName和數據 URI 與啟動 Intent 的這些內容相匹配的任務。如果發現此類任務,系統會將其清除,并在根 Activity 收到對onNewIntent(android.content.Intent)的調用時自行重啟。如果未發現此類任務,系統會創建新任務。“ always”Activity 為文檔創建新任務,即便文檔已經打開。這與同時設置 FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK標記的效果相同。“ none”該 Activity 不會為 Activity 創建新任務。這是默認值,它只會在已設置 FLAG_ACTIVITY_NEW_TASK時創建新任務。概覽屏幕將按其默認方式處理此 Activity:為應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。“ never”即使 Intent 包含 FLAG_ACTIVITY_NEW_DOCUMENT,該 Activity 也不會啟動到新文檔中。設置此值會替換FLAG_ACTIVITY_NEW_DOCUMENT和FLAG_ACTIVITY_MULTIPLE_TASK標記的行為(如果在 Activity 中設置其中一個標志),并且概覽屏幕將為應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。請注意:對于除“
none”和“never”以外的值,必須使用launchMode="standard"定義 Activity。如果未指定此屬性,則使用documentLaunchMode="none"。 android:enabled- 系統是否可實例化 Activity —
"true"表示可以,“false”表示不可以。默認值為“true”。<application>元素擁有自己的enabled屬性,該屬性適用于所有應用組件,包括 Activity。只有在<application>和<activity>屬性都為“true”(因為它們都默認使用該值)時,系統才能將 Activity 實例化。如果其中一個屬性是“false”,則無法實例化 Activity。 android:excludeFromRecents- 是否應從最近使用的應用列表(即概覽屏幕)中排除該 Activity 啟動的任務。換言之,當該 Activity 是新任務的根 Activity 時,此屬性確定最近使用的應用列表中是否應出現該任務。如果應從列表中排除任務,請設置“
true”;如果應將其包括在內,則設置“false”。默認值為“false”。 android:exported- 此元素設置 Activity 是否可由其他應用的組件啟動 —“
true”表示可以,“false”表示不可以。若為“false”,則 Activity 只能由同一應用的組件或使用同一用戶 ID 的不同應用啟動。如果您使用的是 Intent 過濾器,則不應將此元素設置為“
false”。否則,在應用嘗試調用 Activity 時,系統會拋出ActivityNotFoundException異常。相反,您不應為其設置 Intent 過濾器,以免其他應用調用 Activity。如果沒有 Intent 過濾器,則此元素的默認值為“
false”。如果您將元素設置為“true”,則任何知道其確切類名的應用均可訪問 Activity,但在系統嘗試匹配隱式 Intent 時,該 Activity 無法解析。此屬性并非是限制 Activity 向其他應用公開的唯一方式。您還可使用權限來限制哪些外部實體能夠調用 Activity(請參閱
permission屬性)。 android:finishOnTaskLaunch- 每當用戶再次啟動 Activity 的任務(在主屏幕上選擇任務)時,是否應關閉(完成)現有的 Activity 實例 —“
true”表示應關閉,“false”表示不應關閉。默認值為“false”。如果此屬性和
allowTaskReparenting均為“true”,則優先使用此屬性。系統會忽略 Activity 的相似性。系統不會更改 Activity 的父項,而是將其銷毀。 android:hardwareAccelerated- 是否應為此 Activity 啟用硬件加速渲染 —“
true”表示應啟用,“false”表示不應啟用。默認值為“false”。自 Android 3.0 開始,應用可使用經硬件加速的 OpenGL 渲染器,從而提高許多常見 2D 圖形運算的性能。啟用硬件加速渲染器后,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多數運算都會獲得加速。這可以提高動畫及滾動的流暢度并改善整體響應,即便是未顯式利用框架 OpenGL 庫的應用也會從中受益。由于啟用硬件加速會增加資源消耗,因此您的應用將占用更多內存。
請注意,并非所有 OpenGL 2D 運算都會獲得加速。如果您啟用硬件加速渲染器,請對應用進行測試,確保其在利用渲染器時不會出錯。
android:icon- 表示 Activity 的圖標。當需要在屏幕上呈現 Activity 時,系統會向用戶顯示圖標。例如,啟動器窗口中會顯示啟動任務的 Activity 所用圖標。該圖標通常附帶標簽(請參閱
android:label屬性)。必須將該屬性設置為對包含圖像定義的可繪制資源的引用。如果未設置該屬性,則轉而使用為應用整體指定的圖標(請參閱
<application>元素的icon屬性)。Activity 的圖標(無論是在此處設置,還是由
<application>元素設置)同時也是 Activity 所有 Intent 過濾器的默認圖標(請參閱<intent-filter>元素的icon屬性)。 android:immersive- 為當前 Activity 進行沉浸模式設置。如果在應用清單文件條目中為此 Activity 將
android:immersive屬性設置為true,則ActivityInfo.flags成員會始終設置其FLAG_IMMERSIVE位(即便在運行時使用setImmersive()方法更改沉浸模式)。 android:label- 一種可由用戶讀取的 Activity 標簽。在必須向用戶呈現 Activity 時,屏幕上會顯示此標簽。此標簽通常與 Activity 圖標一并顯示。
如果未設置該屬性,則轉而使用為應用整體設置的標簽(請參閱
<application>元素的label屬性)。Activity 的標簽(無論是在此處設置,還是由
<application>元素設置)同時也是 Activity 所有 Intent 過濾器的默認標簽(請參閱<intent-filter>元素的label屬性)。您應將此標簽設置為對字符串資源的引用,以便可以像界面中的其他字符串那樣對其進行本地化。不過,為便于開發應用,您也可將其設置為原始字符串。
android:launchMode- 有關應如何啟動 Activity 的指令。共有四種模式可與
Intent對象中的 Activity 標記(FLAG_ACTIVITY_*常量)協同工作,以確定在調用 Activity 處理 Intent 時應執行的操作。這些模式是:“
standard”
“singleTop”
“singleTask”
“singleInstance”默認模式是“
standard”。如下表所示,這些模式可分為兩大類:“
standard”和“singleTop”Activity 為一類,“singleTask”和“singleInstance”Activity 為另一類。使用“standard”或“singleTop”啟動模式的 Activity 可多次進行實例化。實例可歸屬任何任務,并且可位于 Activity 堆棧中的任何位置。通常,它們會啟動到名為的任務中(除非 Intent 對象包含startActivity()指令,在此情況下會選擇其他任務 — 請參閱 taskAffinity 屬性)。FLAG_ACTIVITY_NEW_TASK相比之下,“
singleTask”和“singleInstance”Activity 只能啟動任務。它們始終位于 Activity 堆棧的根位置。此外,設備一次只能保留一個 Activity 實例,即一次只允許一個此類任務。“
standard”和“singleTop”模式只有一處不同:每次“standard”Activity 有新的 Intent 時,系統都會創建新的類實例來響應該 Intent。每個實例處理單個 Intent。同樣地,您也可以創建新的“singleTop”Activity 實例來處理新的 Intent。不過,如果目標任務的 Activity 堆棧頂部已有一個 Activity 實例,則該實例會(通過調用onNewIntent())接收新的 Intent;此時不會創建新實例。在其他情況下(例如,如果“singleTop”Activity 的某個現有實例雖在目標任務內,但未處于堆棧頂部,或者雖然位于堆棧頂部,但不在目標任務中),系統會創建新實例并將其送入堆棧。同樣地,如果您向上導航到當前堆棧上的某個 Activity,則該行為由父 Activity 的啟動模式決定。如果父 Activity 有啟動模式
singleTop(或者upIntent 包含FLAG_ACTIVITY_CLEAR_TOP),則系統會將該父項置于堆棧頂部,并保留其狀態。導航 Intent 由父 Activity 的onNewIntent()方法接收。如果父 Activity 有啟動模式standard(并且upIntent 不包含FLAG_ACTIVITY_CLEAR_TOP),則系統會將當前 Activity 及其父項同時送出堆棧,并創建新的父 Activity 實例來接收導航 Intent。“
singleTask”和“singleInstance”模式同樣只有一處不同:“singleTask”Activity 允許其他 Activity 成為其任務的一部分。該 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 并向其傳送 Intent。不過,如果已存在 Activity 實例,則系統會調用該實例的 onNewIntent()方法(而非創建新的 Activity 實例),向其傳送 Intent。“ singleInstance”否 與“ singleTask"”相同,只是系統不會將任何其他 Activity 啟動到包含實例的任務中。該 Activity 始終是其任務中的唯一 Activity。如上表所示,
standard是默認模式,并且適用于大多數類型的 Activity。對眾多類型的 Activity 而言,SingleTop也是常見且有用的啟動模式。其他模式(singleTask和singleInstance)不適用于大多數應用,因為它們所形成的交互模式可能讓用戶感到陌生,并且與大多數其他應用差別較大。無論您選擇哪種啟動模式,在 Activity 啟動期間以及使用返回按鈕從其他 Activity 和任務返回該 Activity 時,請務必對其進行易用性測試。
如需了解有關啟動模式及其與 Intent 標志交互的詳細信息,請參閱任務和返回棧文檔。
android:lockTaskMode- 確定當設備在鎖定任務模式下運行時,系統如何顯示此 Activity。
Android 可以類似于 Kiosk 的沉浸式方式(稱為鎖定任務模式)運行任務。當系統在鎖定任務模式下運行時,設備用戶通常無法查看通知、訪問非白名單應用或返回主屏幕(除非主頁應用已列入白名單)。只有經設備政策控制器 (DPC) 列入白名單后,應用才能在系統處于鎖定任務模式時運行。但是,系統和特權應用無需列入白名單便可在鎖定任務模式下運行。
此屬性的值可為以下
R.attr.lockTaskMode任一字符串值:值 描述 "normal"默認值。這是默認值。任務不會啟動到鎖定任務模式中,但您可通過調用 startLockTask()將其置于此模式中。"never"任務不會啟動到鎖定任務模式中,且設備用戶無法在概覽屏幕中固定這些任務。
請注意:此模式僅可用于系統應用和特權應用。系統會將帶有此值的非特權應用視為
normal。"if_whitelisted"如果 DPC 使用 DevicePolicyManager.setLockTaskPackages()授權此軟件包,則此模式等同于always,區別在于如果此 Activity 是最后一個鎖定任務,則其需要調用stopLockTask()才能達成目的。如果 DPC 不對此軟件包授權,則此模式等同于normal。"always"位于此 Activity 根位置的任務始終會啟動到鎖定任務模式中。如果系統在此任務啟動時已處于鎖定模式中,則新任務將在當前任務上方啟動。在鎖定模式下啟動的任務可通過調用
finish()退出此模式。請注意:此模式僅可用于系統應用和特權應用。系統會將帶有此值的非特權應用視為
normal。該屬性是 API 級別 23 中的新增屬性。
android:maxRecents- 概覽屏幕中位于此 Activity 根位置處的最大任務數。達到該條目數時,系統會從概覽屏幕中移除近期最少使用的實例。有效值為 1 至 50(內存較小的設備使用 25);0 為無效值。該值必須是整數,例如 50。默認值為 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”),則名稱將追加至<manifest>元素中指定的軟件包名稱。一旦發布應用,即不應更改該名稱(除非您設置了
android:exported="false")。沒有默認值。必須指定該名稱。
android:noHistory- 當用戶離開 Activity 且屏幕上不再顯示該 Activity 時,是否應從 Activity 堆棧中將其移除并完成(調用其
方法)—“finish()true”表示應將其完成,“false”表示不應將其完成。默認值為“false”。“
true”一值表示 Activity 不會留下歷史跟蹤記錄。它不會留在任務的 Activity 堆棧內,因此用戶將無法返回 Activity。在此情況下,如果您通過啟動另一個 Activity 來獲取該 Activity 的結果,系統永遠不會調用onActivityResult()。該屬性是 API 級別 3 中的新增屬性。
android:parentActivityName- Activity 邏輯父項的類名稱。此處的名稱必須與為相應
<activity>元素的android:name屬性所指定的類名稱一致。系統會讀取該屬性,以確定當用戶按下操作欄中的“向上”按鈕時應該啟動哪一個 Activity。系統還可利用這些信息,通過
TaskStackBuilder合成 Activity 的返回棧。如要支持 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.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 的狀態,以及每個高于返回棧且已將自身的
persistableMode屬性設置為persistAcrossReboots的 Activity 的狀態。如果 Activity 未將persistableMode屬性設置為persistAcrossReboots,或者使用Intent.FLAG_ACTIVITY_NEW_DOCUMENT標記啟動,則系統不會保留此 Activity 及高于返回棧的所有 Activity。當 Intent 加載應用中將
persistableMode屬性設置為persistAcrossReboots的 Activity 時,此 Activity 將在其PersistableBundle方法中接收onCreate()對象。因此,您可使用onSaveInstanceState()在跨設備重新啟動時保留 Activity 的狀態,只要其persistableMode屬性設置為persistAcrossReboots。請注意:即便您在除應用根 Activity 以外的 Activity 上設置此屬性值,該值仍會影響應用的行為。
persistNever系統不會保留 Activity 的狀態。
請注意:只有在應用的根 Activity 上設置此屬性值后,該值才會影響應用的行為。
該屬性是 API 級別 21 中的新增屬性。
android:permission- 啟動 Activity 或以其他方式使 Activity 響應 Intent 時,客戶端必須具備的權限的名稱。如果系統尚未向
或startActivity()的調用方授予指定權限,則其 Intent 將不會傳遞給 Activity。startActivityForResult()如果未設置該屬性,則對 Activity 應用由
<application>元素的permission屬性所設置的權限。如果二者均未設置,則 Activity 不受權限保護。 android:process- 應在其中運行 Activity 的進程的名稱。正常情況下,應用的所有組件均以為應用創建的默認進程名稱運行,您無需使用該屬性。但如有必要,您可以使用該屬性替換默認進程名稱,以便將應用組件散布到多個進程中。
如果為該屬性分配的名稱以冒號(“:”)開頭,則系統會在需要時創建應用專用的新進程,并且 Activity 會在該進程中運行。如果進程名稱以小寫字符開頭,則 Activity 將在使用該名稱的全局進程中運行,前提是它擁有相應的權限。如此一來,不同應用中的組件便可共享進程,從而減少資源使用。
<application>元素的process屬性可為所有組件設置不同的默認進程名稱。 android:relinquishTaskIdentity- Activity 是否會將其任務標識符交給任務棧中在其之上的 Activity。如果任務的根 Activity 將該屬性設置為“
true”,則該任務會用其下一個 Activity 的 Intent 替換基本 Intent。如果下一個 Activity 也將該屬性設置為“true”,則該 Activity 會將基本 Intent 讓給其在同一任務中啟動的其他 Activity。系統會繼續為每個 Activity 執行此過程,直至遇到某個 Activity 將該屬性設置為“false”為止。默認值為“false”。如果將該屬性設置為“
true”,則 Activity 還可利用ActivityManager.TaskDescription來更改概覽屏幕中的標簽、顏色和圖標。 resizeableActivity-
指定應用是否支持多窗口顯示。您可以在
<activity>或<application>元素中設置該屬性。如果您將該屬性設置為 true,則用戶可以在分屏和自由窗口模式下啟動 Activity。如果您將該屬性設置為 false,則 Activity 不支持多窗口模式。如果該值為 false,且用戶嘗試在多窗口模式下啟動 Activity,則該 Activity 將全屏顯示。
如果應用面向 API 級別 24 或更高級別,但您未指定該屬性的值,則該屬性的值默認設為 true。
該屬性是 API 級別 24 中的新增屬性。
android:screenOrientation- Activity 在設備上的顯示方向。如果 Activity 是在多窗口模式下運行,則系統會忽略該屬性。
其值可以是下列任一字符串:
“ unspecified”默認值。由系統選擇方向。在不同設備上,系統使用的政策以及基于政策在特定上下文中所做的選擇可能會有所差異。 “ behind”與 Activity 棧中緊接其后的 Activity 的方向相同。 “ landscape”屏幕方向為橫向(顯示的寬度大于高度)。 “ portrait”屏幕方向為縱向(顯示的高度大于寬度)。 “ reverseLandscape”屏幕方向是與正常橫向方向相反的橫向。此項為 API 級別 9 中的新增配置。 “ reversePortrait”屏幕方向是與正??v向方向相反的縱向。此項為 API 級別 9 中的新增配置。 “ sensorLandscape”屏幕方向為橫向,但可根據設備傳感器調整為正?;蚍聪虻臋M向。即使用戶鎖定基于傳感器的旋轉,系統仍可使用傳感器。此項為 API 級別 9 中的新增配置。 “ sensorPortrait”屏幕方向為縱向,但可根據設備傳感器調整為正?;蚍聪虻目v向。即使用戶鎖定基于傳感器的旋轉,系統仍可使用傳感器。此項為 API 級別 9 中的新增配置。 “ userLandscape”屏幕方向為橫向,但可根據設備傳感器和用戶首選項調整為正?;蚍聪虻臋M向。此項為 API 級別 18 中的新增配置。 “ userPortrait”屏幕方向為縱向,但可根據設備傳感器和用戶首選項調整為正常或反向的縱向。此項為 API 級別 18 中的新增配置。 “ sensor”屏幕方向由設備方向傳感器決定。顯示方向取決于用戶如何手持設備,它會在用戶旋轉設備時發生變化。但在默認情況下,一些設備不會旋轉為所有四種可能的方向。如要支持所有這四種方向,請使用 "fullSensor"。即使用戶鎖定基于傳感器的旋轉,系統仍可使用傳感器。“ fullSensor”屏幕方向由使用 4 種方向中任一方向的設備方向傳感器決定。這與 "sensor"類似,不同之處在于無論設備在正常情況下使用哪種方向,該值均支持所有 4 種可能的屏幕方向(例如,一些設備正常情況下不使用反向縱向或反向橫向,但其支持這些方向)。此項為 API 級別 9 中的新增配置。“ nosensor”確定屏幕方向時不考慮物理方向傳感器。系統會忽略傳感器,因此顯示內容不會隨用戶手持設備的方向而旋轉。 “ user”用戶當前的首選方向。 “ fullUser”如果用戶鎖定基于傳感器的旋轉,則其行為與 user相同,否則,其行為與fullSensor相同,并且支持所有 4 種可能的屏幕方向。此項為 API 級別 18 中的新增配置。“ locked”將屏幕方向鎖定為其當前的任意旋轉方向。此項為 API 級別 18 中的新增配置。 請注意:如果您聲明其中一個橫向或縱向值,則系統會將其視為對 Activity 運行方向的硬性要求。因此,您聲明的值支持通過 Google Play 等服務進行過濾,這樣只有支持 Activity 規定方向的設備才能使用您的應用。例如,如果您聲明
"landscape"、"reverseLandscape"或"sensorLandscape",則您的應用只能供支持橫向方向的設備使用。不過,您還應通過<uses-feature>元素明確聲明,您的應用要求采用縱向還是橫向方向。例如,<uses-feature android:name="android.hardware.screen.portrait"/>。這純粹是 Google Play(以及其他支持過濾的服務)提供的一種過濾行為,平臺本身并不能控制是否可在僅支持某種方向的設備上安裝您的應用。 android:showForAllUsers-
當設備的當前用戶不是啟動 Activity 的用戶時,是否要顯示 Activity。您可將此屬性設置為字面量值(
"true"或"false"),或包含布爾值的資源或主題屬性。此屬性為 API 級別 23 中的新增屬性。
android:stateNotNeeded- 在不保存 Activity 狀態的情況下,能否終止并成功重啟該 Activity —“
true”表示可在不考慮其之前狀態的情況下重啟,“false”表示需要之前的狀態。默認值為“false”。正常情況下,為保存資源而暫時關閉 Activity 前,系統會調用其
方法。該方法會將 Activity 的當前狀態存儲在一個onSaveInstanceState()Bundle對象中,然后在 Activity 重啟時將其傳遞給。如果將該屬性設置為“onCreate()true”,則系統可能不會調用onSaveInstanceState(),并且會向onCreate()傳遞null(而非 Bundle)— 這與 Activity 首次啟動時的情況完全相同。“
true”設置可確保 Activity 能夠在未保留狀態時重啟。例如,顯示主屏幕的 Activity 可以使用該設置,確保系統不會在該 Activity 因某種原因而崩潰時將其移除。 supportsPictureInPicture-
指定 Activity 是否支持畫中畫顯示。如果
android:resizeableActivity是 false,則系統會忽略該屬性。該屬性是在 API 級別 24 添加的。
android:taskAffinity- 與 Activity 有著相似性的任務。從概念上講,具有同一相似性的 Activity 歸屬同一任務(從用戶的角度來看,則是歸屬同一“應用”)。任務的相似性由其根 Activity 的相似性確定。
相似性確定兩點內容 — Activity 更改父項后的任務(請參閱
allowTaskReparenting屬性),以及通過標記啟動 Activity 時,用于容納該 Activity 的任務。FLAG_ACTIVITY_NEW_TASK默認情況下,應用中的所有 Activity 都具有同一相似性。您可以設置該屬性,以不同方式將其分組,甚至可以在同一任務內放置不同應用中定義的 Activity。如要指定 Activity 與任何任務均無相似性,請將其設置為空字符串。
如果未設置該屬性,則 Activity 會繼承為應用設置的相似性(請參閱
<application>元素的taskAffinity屬性)。應用默認相似性的名稱為<manifest>元素所設置的軟件包名稱。 android:theme- 對定義 Activity 總體主題的樣式資源的引用。此屬性會自動將 Activity 的場景設置為使用該主題(請參閱
),并且還可引發 Activity 啟動前的“啟動”動畫(以更加符合 Activity 的實際外觀)。setTheme()如果未設置該屬性,則 Activity 會繼承通過
<application>元素的theme屬性為應用所整體設置的主題。如果同樣未設置該屬性,則使用默認系統主題。如需了解詳細信息,請參閱樣式和主題開發者指南。 android:uiOptions- 針對 Activity UI 的附加選項。
必須是下列值之一。
值 描述 "none"無附加界面選項。這是默認值。 "splitActionBarWhenNarrow"當水平空間受限時(例如在手持設備上以縱向模式顯示的情況),在屏幕底部添加一欄,以顯示應用欄(也稱為操作欄)中的操作項。系統將應用欄分成頂部導航區和底部操作項欄,而非在屏幕頂部的應用欄中顯示少量操作項。這可以確保操作項以及頂部的導航和標題元素均能獲得適量空間。系統不會將菜單項拆分到兩個欄中,它們始終一起出現。 如需了解有關應用欄的詳細信息,請參閱添加應用欄培訓課程。
該屬性是在 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 的主窗口是否通過調整尺寸為軟鍵盤騰出空間,或者是否通過平移窗口內容以在屏幕上顯示當前焦點。根據窗口的內容是否存在任何可滾動其內容的布局視圖,系統會自動選擇其中一種模式。如果存在這種視圖,系統會調整窗口尺寸,前提是可通過滾動操作在較小區域內看到窗口的所有內容。 這是對主窗口行為的默認設置。
“ adjustResize”始終調整 Activity 主窗口的尺寸,以為屏幕上的軟鍵盤騰出空間。 “ adjustPan”不通過調整 Activity 主窗口的尺寸為軟鍵盤騰出空間。相反,窗口的內容會自動平移,使鍵盤永遠無法遮蓋當前焦點,以便用戶始終能看到自己輸入的內容。這通常不如調整窗口尺寸可取,因為用戶可能需關閉軟鍵盤才能進入被遮蓋的窗口部分,并與之進行交互。 該屬性是 API 級別 3 中的新增屬性。

浙公網安備 33010602011771號