- 語法:
<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"
。如未設定此屬性,
<application>
元素的相應allowTaskReparenting
屬性將值設定完畢後,該值就會套用至活動。預設值為"false"
。通常,活動啟動時會與啟動活動的任務相關聯,並在整個生命週期內保留在該任務中。當活動的現有任務不再顯示時,您可以使用此屬性強制將活動的父項重新改為與其具有相依性的任務。這個屬性常見的用途為,促使應用程式的活動移至與該應用程式相關聯的主要任務中。
舉例來說,如果電子郵件內含網頁連結,點選該連結就會帶出可顯示該網頁的活動。該活動是由瀏覽器應用程式定義,但會在電子郵件工作中啟動。如果重新將其父項重新指派給瀏覽器工作,則會在下次瀏覽器前端顯示,並在電子郵件工作再次前端顯示時消失。
活動的相依性是由
taskAffinity
屬性定義。讀取任務根活動的相依性,即可判定任務的相依性。因此,根據定義,根活動一律會位於具有同一相依性的任務中。由於啟動模式為"singleTask"
或"singleInstance"
的活動只能位於任務的根目錄,因此重新設定父項的功能僅限於"standard"
和"singleTop"
模式。(另請參閱launchMode
屬性)。 android:alwaysRetainTaskState
- 系統是否一律會維護活動所在任務的狀態。
"true"
表示是,"false"
表示在特定情況下,系統可以將工作重設為初始狀態。預設值為"false"
。這項屬性僅適用於任務的根活動,其他所有活動都會忽略此屬性。一般而言,當使用者在主畫面上重新選取任務時,系統會在特定情況下清除該任務 (也就是從根活動上方的堆疊中移除所有活動)。通常,如果使用者在一段時間內 (例如 30 分鐘) 未造訪任務,系統就會執行這項作業。
不過,如果這個屬性為
"true"
,無論使用者如何返回,都會以最後的狀態返回工作。網路瀏覽器具有許多使用者想要保留的狀態 (例如多個開啟的分頁),因此這項功能在這類應用程式中非常實用。 android:autoRemoveFromRecents
- 是否要在「最近使用」畫面」中,保留具有這項屬性的活動所啟動的任務,直到任務的最後一個活動完成為止。如果為
true
,則工作會自動從「近期」畫面中移除。這會覆寫呼叫端使用的FLAG_ACTIVITY_RETAIN_IN_RECENTS
。這個值必須是布林值,可以是"true"
或"false"
。 android:banner
- 這是一種可繪製資源,用於為關聯項目提供延伸圖片橫幅。可與
<activity>
標記搭配使用,為特定活動提供預設橫幅,或是與<application>
標記搭配使用,為所有應用程式活動提供橫幅。系統會使用橫幅來代表 Android TV 主畫面上的應用程式。橫幅只會顯示在主畫面上,因此只有在應用程式含有處理
CATEGORY_LEANBACK_LAUNCHER
意圖的活動時,才會指定橫幅。這項屬性會設為包含圖片的可繪製資源參照,例如
"@drawable/banner"
。此屬性沒有預設橫幅。詳情請參閱「開始使用電視應用程式」中的「 提供主畫面橫幅」一節。
android:canDisplayOnRemoteDevices
-
指出活動是否可在遠端裝置上顯示,該裝置可能會或不會執行 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"
TA 變更為導覽類型 (軌跡球或 D-pad)。但這通常不會發生。 "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"
即使 Intent 包含 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"
,即使在執行階段使用setImmersive()
方法變更沉浸式模式,ActivityInfo.flags
成員一律會設定FLAG_IMMERSIVE
位元。 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"
啟動模式的活動可以多次執行個體化。例項可以屬於任何任務,也可以位於活動任務中的任何位置。通常,除非
Intent
物件包含FLAG_ACTIVITY_NEW_TASK
指令,否則會在呼叫startActivity()
的工作中啟動。如果是這種情況,系統會選擇其他工作。詳情請參閱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"
的活動可讓其他活動 (必須是"standard"
和"singleTop"
活動) 加入其任務。另一方面,
"singleInstance"
活動則不允許其他活動成為其任務的一部分。這項活動必須是工作中唯一的活動。如果該活動啟動另一個活動,後者會分配到其他任務內,如同FLAG_ACTIVITY_NEW_TASK
在意圖中的情況。用途 啟動模式 是否有多個執行個體? 留言 大多數活動的正常啟動 "standard"
是 預設。系統一律會在目標工作中建立新的活動執行個體,並將意圖轉送到該工作。 "singleTop"
有條件 如果在目標任務的頂端已經存在一個活動的執行個體,系統就會透過呼叫該執行個體的 onNewIntent()
方法將意圖轉送到該執行個體,不會建立該活動的新執行個體。專門啟動
(不建議一般用途)"singleTask"
有條件 系統會在新工作的根層級中建立活動,或設有同樣相依性的現有任務中尋找該活動。如果該活動內已有執行個體,且該執行個體位於任務根層級,則系統會透過呼叫該執行個體的 onNewIntent()
方法將意圖轉送到該執行個體,而不會建立新的執行個體。"singleInstance"
否 與 "singleTask"
相同,但系統不會在例項所在的任務中啟動任何其他活動。該活動始終是其任務中唯一的成員。"singleInstancePerTask"
有條件 活動只能做為任務的根活動 (即建立任務的第一個活動) 執行,因此任務中只有一個此活動的例項。不過,此活動可在不同任務中多次例項化。 如上表所示,
"standard"
為預設模式,適用於大多數類型的活動。"singleTop"
也是用於多種類型的活動,是相當實用的啟動模式。其他模式 ("singleTask"
、"singleInstance"
和"singleInstancePerTask"
) 不適合用於大多數應用程式。這類模式產生的互動模式,可能會讓使用者感到陌生,且與大多數其他應用程式大不相同。無論您選擇哪種啟動模式,請確保在啟動過程中,以及使用「Back」按鈕從其他活動和任務返回該活動時,對活動進行可用性測試。
如要進一步瞭解啟動模式及其與
Intent
旗標的互動方式,請參閱「任務和返回堆疊」一文。android:lockTaskMode
- 決定裝置以鎖定任務模式執行時,系統如何顯示這個活動。
Android 能以類似資訊站的方式執行任務,這種沉浸式的做法稱為鎖定任務模式。當系統在鎖定任務模式下執行時,裝置使用者通常無法看到通知、無法存取未列入許可清單的應用程式,也無法返回主畫面 (除非已將 Google Home 應用程式列入許可清單)。
只有經裝置政策控制器 (DPC) 列入許可清單的應用程式,才能在系統處於鎖定任務模式時執行。不過,系統和具有特殊權限的應用程式可以在鎖定任務模式下執行,而不必加入許可清單。
這個值可以是下列任一
R.attr.lockTaskMode
字串值:值 說明 "normal"
預設值。這是預設值。系統不會在鎖定任務模式中啟動任務,但您可以藉由呼叫 startLockTask()
讓其處於該模式。"never"
任務不會在
lockTask
模式下啟動,裝置使用者也無法從「最近使用」畫面固定這些任務。注意:這個模式僅適用於系統和具有特殊權限的應用程式。具有該值的非權限應用程式被視為
normal
。"if_whitelisted"
如果 DPC 使用 DevicePolicyManager.setLockTaskPackages()
來授權這個套件,代表這種模式與always
相同,唯一區別是,如果該活動是最後一個經鎖定的任務,就需要呼叫stopLockTask()
才能完成。如果 DPC 未授權此套件,則此模式與normal
相同。"always"
位於此活動根層級的任務,一律會在鎖定任務模式下啟動。如果系統在這項任務啟動時已處於鎖定任務模式,新的任務會在目前的任務上方啟動。在此模式下啟動的工作可呼叫
finish()
以離開鎖定工作模式。注意事項:這個模式僅適用於系統和具有權限的應用程式。具有該值的非權限應用程式被視為
normal
。這項屬性是在 API 級別 23 中導入。
android:maxRecents
- 在 「最近使用」畫面中,根層級為此活動的任務數量上限。達到這個項目數量時,系統會從「最近使用」畫面中移除最近最少使用的例項。有效值是介於 1 到 50 之間的整數,在低記憶體裝置上則為 1 到 25 之間。零值無效。預設值為 16。
android:maxAspectRatio
該活動支援的最大長寬比。如果應用程式在寬高比的裝置上運行,系統會自動對應用程式進行上下黑邊處理,留下部分未使用的螢幕,以便應用程式能夠以其指定的最大寬高比運行。
將裝置長邊除以短邊所得的商 (以小數形式表示),就是最大顯示比例。舉例來說,如果長寬比上限是 7:3,請將這個屬性的值設為 2.33。
在非穿戴式裝置上,這項屬性的值必須為 1.33 以上。在穿戴式裝置上則必須為 1.0 以上。否則系統會忽略設定值。
注意事項:如果活動將
resizeableActivity
設為 true,系統會忽略這個屬性,因為您的活動支援任何大小。如要進一步瞭解這項屬性,請參閱「宣告顯示比例上限」。
android:multiprocess
- 設定能否在啟動活動的元件程序中,啟動活動的例項。
"true"
表示可以,"false"
表示不可以。預設值為"false"
。通常,系統會在定義例項的應用程式程序中,啟動活動的新例項,因此該活動的所有例項都會在同一個程序中執行。然而,如果這個旗標設為
"true"
,活動的例項就能在多個程序中執行,讓系統在任何會用到例項的地方建立例項 (前提是權限允許),但這幾乎毫無必要。 android:name
- 實作活動的類別名稱,為
Activity
的子類別。屬性值通常是完整的類別名稱,例如"com.example.project.ExtracurricularActivity"
。不過為了精簡起見,如果名稱的第一個字元是半形句號 (例如".ExtracurricularActivity"
),則會加到build.gradle
檔案中指定的命名空間後方。發布應用程式後,除非您已設定
android:exported="false"
,否則請勿變更這個名稱。這項屬性沒有預設值。您必須指定名稱。 android:noHistory
- 當使用者離開活動且已無法在畫面上看到該活動時,是否要呼叫該活動的
finish()
方法,從活動堆疊中予以移除並結束。如果已完成,則為"true"
;如果未完成,則為"false"
。預設值為"false"
。"true"
值表示該活動不會留下歷史追蹤記錄。系統不會將該活動保留在任務的活動堆疊中,因此使用者無法返回。在這種情況下,如果您透過啟動另一個活動來取得此活動的結果,系統就一律不會呼叫onActivityResult()
。這項屬性是在 API 級別 3 中導入。
android:parentActivityName
- 活動的邏輯父類的類別。這裡的名稱必須符合相應
<activity>
元素的android:name
屬性所指定的類別名稱。系統會讀取這項屬性,判斷使用者輕觸動作列中的向上按鈕時要啟動哪個活動。系統也能使用這項資訊,利用
TaskStackBuilder
將活動返回堆疊彙整在一起。若要支援 API 級別 4 到 16,您也可以用一個
<meta-data>
元素來宣告父項活動,該元素須指定"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>
如要進一步瞭解如何宣告父項活動來支援向上導覽機制,請參閱導覽說明。
這項屬性是在 API 級別 16 中導入。
android:persistableMode
定義一個活動的執行個體如何在包含任務的裝置重新啟動時被保留。
如果任務的根活動將這個屬性的值設為
persistRootOnly
,系統便只會保留根活動。否則,系統會檢查任務返回堆疊中位置較高的活動,如果其中有將這個屬性值設為persistAcrossReboots
的活動,也都會保留下來。如果使用這個屬性,則必須將其值設為下列其中一個值:
值 說明 persistRootOnly
預設值。 當系統重新啟動時,活動任務被保留下來,但只有根層級活動的啟動意圖被使用。
當應用程式的啟動意圖載入應用程式的根活動時,活動並不會收到
PersistableBundle
物件。因此,請勿利用onSaveInstanceState()
保留應用程式在裝置重新啟動狀態下的根活動狀態。注意:只有在應用程式的根活動上設定這個屬性值時,該值才會影響您應用程式的行為。
persistAcrossReboots
系統會保留這個活動的狀態,還有返回堆疊上層各活動的狀態,後者的
persistableMode
屬性設為persistAcrossReboots
。如果活動沒有設為persistAcrossReboots
的persistableMode
屬性,或者是透過Intent.FLAG_ACTIVITY_NEW_DOCUMENT
旗標啟動,系統就不會保留該活動,連帶也不會保留返回堆疊上層的所有活動。當意圖在應用程式中載入
persistableMode
屬性設為persistAcrossReboots
的活動時,該活動會在自身的onCreate()
方法中接收PersistableBundle
物件。因此,只要活動的persistableMode
屬性設為persistAcrossReboots
,您就可以透過onSaveInstanceState()
在裝置重新啟動時保留活動的狀態。注意:即使是在應用程式根活動以外的活動上設定這個屬性值,該值仍會影響您應用程式的行為。
persistNever
系統不會保留活動的狀態。
注意:只有在應用程式的根活動上設定這個屬性值時,該值才會影響您應用程式的行為。
此屬性在 API 級別 21 中推出。
android:permission
- 客戶必須擁有的權限名稱來啟動該活動或者以其他方式讓它對意圖作出反應。如果
startActivity()
或startActivityForResult()
的呼叫端未獲得指定權限,其意圖就不會傳遞至活動。如未設定這個屬性,由
<application>
元素的permission
屬性所設定的權限會套用至該活動。如果未設定這兩個屬性,活動就不會受到權限保護。 android:process
活動執行程序的名稱。一般來說,應用程式的所有元件都是在為應用程式建立的預設程序名稱中執行,因此您不需要使用這個屬性。但如有必要,您可以使用這項屬性覆寫預設的程序名稱,以便將應用程式元件分散至多個程序。
如果指派給這項屬性的名稱開頭為半形冒號 (
:
),系統會在需要時建立一個專屬於該應用程式的新程序,而活動會在該程序中執行。如果程序名稱的開頭是小寫英文字元,活動會在採用該名稱的通用程序中執行,前提是該程序具備相關權限,這樣可讓不同應用程式中的元件共用程序,進而減少資源用量。
<application>
元素的process
屬性可以為所有元件設定不同的預設程序名稱。android:relinquishTaskIdentity
指定活動是否要將自身的任務識別碼交給任務堆疊中位置較高的其他活動。如果任務的根層級活動將此屬性設為
"true"
,則該任務會將基礎Intent
替換為任務中下一個活動的基礎意圖。如果下一個活動也將此屬性設為
"true"
,則該活動會將基礎Intent
讓給其在同一任務中啟動的任何活動。系統會繼續為每個活動執行此程序,直到遇到將此屬性設為"false"
的活動為止。預設值為"false"
。將此屬性設為
"true"
後,活動也可以使用ActivityManager.TaskDescription
變更 「最近」畫面中的標籤、顏色和圖示。android:requireContentUriPermissionFromCaller
-
指定傳遞內容 URI 時,啟動此活動所需的權限。預設值為
none
,表示不需要特定權限。設定這項屬性可根據叫用者的權限,限制活動叫用。如果叫用端不具備必要權限,系統會透過SecurityException
拒絕活動啟動。請注意,這項強制執行機制適用於
Intent.getData()
、Intent.EXTRA_STREAM
和Intent.getClipData()
中的內容 URI。可以是字串值,使用 '\\;' 逸出字元,例如 '\\n' 或 '\\uxxxx' 代表萬國碼字元;
必須是下列其中一個常數值。
常數 值 說明 none 0 根據預設,不需要任何特定權限。 讀取 1 強制要求叫用端對傳遞的內容 URI 具有讀取權。 readAndWrite 4 強制要求叫用端對傳遞的內容 URI 擁有讀取和寫入存取權。 readOrWrite 3 強制要求叫用端對傳遞的內容 URI 具有讀取或寫入存取權。 寫出好文 2 強制要求叫用端對傳遞的內容 URI 擁有寫入權限。 android:resizeableActivity
-
指定應用程式是否支援 多視窗模式。您可以在
<activity>
或<application>
元素中設定這個屬性。如果您將這項屬性設為
"true"
,使用者就能在分割畫面和任意形式模式下啟動活動。如果您將屬性設為"false"
,應用程式就無法針對多視窗環境進行測試或最佳化。系統可能仍會將活動置於套用相容模式的多視窗模式下。此外,即使您將這項屬性設為
"false"
,也無法保證畫面 (例如子母畫面) 或其他螢幕上不會顯示其他處於多視窗模式下的應用程式。因此,設定這個旗標並不代表應用程式擁有專屬資源存取權。如果應用程式指定 API 級別 24 以上版本,但您沒有指定這個屬性的值,該屬性值會預設為
"true"
。如果應用程式指定的 API 級別為 31 以上,則此屬性在小螢幕和大螢幕上的運作方式會有所不同:
- 大螢幕 (sw >= 600dp):所有應用程式皆支援多視窗模式。這項屬性會表明能否調整應用程式大小,而不是應用程式是否支援多視窗模式。設為
resizeableActivity="false"
時,應用程式會在必要時處於相容模式,以符合顯示尺寸。 - 小螢幕 (sw < 600dp):如果
resizeableActivity="true"
,且活動的最小寬度和最小高度都符合多視窗模式的要求,則應用程式支援多視窗模式。如果設為resizeableActivity="false"
,無論活動的最小寬度和高度為何,應用程式都不支援多視窗模式。
注意事項:裝置製造商可覆寫 API 級別 31 的行為。
這個屬性已新增至 API 級別 24。
注意事項:工作的根活動值會套用至該工作啟動的所有額外活動。也就是說,如果任務的根層級活動可以調整大小,系統就會將任務中所有其他活動視為可調整大小。如果根層級活動無法調整大小,任務中的其他活動就無法調整大小。
- 大螢幕 (sw >= 600dp):所有應用程式皆支援多視窗模式。這項屬性會表明能否調整應用程式大小,而不是應用程式是否支援多視窗模式。設為
android:screenOrientation
活動要求的方向。
當活動填滿整個螢幕時,系統會根據要求的方向值,建議您變更該螢幕的方向。這可能會導致方向與螢幕在空間中的實際方向不同,使用者必須旋轉裝置才能繼續使用應用程式。在 Android 12 (API 級別 31) 以上版本中,裝置製造商可以設定個別裝置螢幕 (例如平板電腦大小的折疊式裝置螢幕),忽略這項建議,並強制活動在使用者偏好的裝置方向中顯示黑邊。這樣一來,活動的方向就會與要求的方向相符,而不需要使用者實際旋轉裝置。
在多視窗模式中,系統不會將要求的螢幕方向做為整體方向的建議。如果活動加上黑邊,要求的方向會影響套用至活動的黑邊。
這個值可以是下列任一字串:
"unspecified"
預設值。系統選擇方向。因此,不同裝置使用的政策和在特定情境下做出的選擇可能會有所不同。 "behind"
方向會與活動堆疊中緊位於該活動下方的活動相同。 "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
,因為活動會在第一次啟動時傳遞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"
不透過調整活動的主要視窗大小來為螢幕鍵盤騰出空間,而是會自動平移視窗的內容,這樣鍵盤就一律不會遮擋當前的焦點,可讓使用者隨時看到自己輸入的內容。比起調整視窗大小,通常不建議採取這個做法,因為使用者可能需要關閉螢幕鍵盤,才能看到視窗被遮住的部分並進行互動。 "adjustNothing"
不透過調整活動的主要視窗大小或平移來為螢幕鍵盤騰出空間,活動會負責使用視窗內嵌來為螢幕鍵盤騰出空間。對於正確處理視窗內嵌的活動,這可讓您最妥善地控管視窗內容在螢幕上的顯示方式。 這項屬性是在 API 級別 3 中導入。
- 導入版本:
- 適用於所有屬性 (除了在 API 級別 3 中新增的
noHistory
和windowSoftInputMode
)。 - 另請參閱:
<application>
<activity-alias>
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-01-14 (世界標準時間)。
[null,null,["上次更新時間:2025-01-14 (世界標準時間)。"],[],[]]