Application 標(biāo)簽
android:allowTaskReparenting
android:allowTaskReparenting=["true" | "false"]?
表明了這個(gè)應(yīng)用在 reset task 時(shí),它的所有 activity 是否可以從打開它們的 task 棧中遷移到它們聲明的 taskAffinity 親和性(taskAffinity 屬性可以查看我的這篇博客:android深入解析Activity的launchMode啟動(dòng)模式撩穿,Intent Flag,taskAffinity)棧中萍倡,true 代表可以,false 代表不可以日杈。Android 源碼中遣铝,我們從 Home 界面啟動(dòng)程序時(shí)都帶了 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,所以從 Home 界面啟動(dòng)程序就會(huì)進(jìn)行 reset task莉擒,也就會(huì)使用到 allowTaskReparenting 這個(gè)屬性酿炸。
一般來說,當(dāng) Activity 啟動(dòng)后涨冀,它就與啟動(dòng)它的 Task 關(guān)聯(lián)填硕,并且在那里消耗它的整個(gè)生命周期,當(dāng)當(dāng)前的 Task 不再顯示時(shí),你可以使用這個(gè)特性來強(qiáng)制 Activity 移動(dòng)到有著 affinity 的 Task 中扁眯。例如在一封 email 郵件中包含一個(gè) web 頁面的鏈接壮莹,點(diǎn)擊它就會(huì)啟動(dòng)一個(gè) Browser Activity 來顯示這個(gè)頁面,這個(gè) Activity 時(shí)由 Browser 應(yīng)用程序定義的姻檀,但是現(xiàn)在它作 email Task 的一部分命满,將它的 allowTaskReparenting 設(shè)置為 true,如果 Browser 下一次進(jìn)入前臺(tái)時(shí)绣版,它就會(huì)根據(jù) taskAffinity 屬性重新宿主到 Browser Task 棧中胶台,它就能被看見,并且當(dāng) email Task 再次進(jìn)入前臺(tái)時(shí)杂抽,就看不到它了诈唬。
android:allowBackup
android:allowBackup=["true" | "false"]
這個(gè)標(biāo)識(shí)用來表示是否允許應(yīng)用備份相關(guān)的數(shù)據(jù)并且在必要時(shí)候恢復(fù)還原這些數(shù)據(jù),如果該標(biāo)識(shí)設(shè)為 false缩麸,則代表不備份和恢復(fù)任何的應(yīng)用數(shù)據(jù)铸磅,默認(rèn)的該標(biāo)識(shí)屬性為 true。當(dāng) allowBackup 標(biāo)識(shí)設(shè)置為 true 時(shí)杭朱,用戶即可以通過 adb backup 和 adb restore 來進(jìn)行對應(yīng)數(shù)據(jù)的備份和恢復(fù)阅仔,這個(gè)在很多時(shí)候會(huì)帶來一定的安全風(fēng)險(xiǎn)。
adb backup 命令容許任何一個(gè)打開 USB 調(diào)試開關(guān)的人從 Android 手機(jī)中復(fù)制應(yīng)用數(shù)據(jù)到外設(shè)痕檬,一旦應(yīng)用數(shù)據(jù)被備份之后霎槐,所有應(yīng)用數(shù)據(jù)都可被用戶讀人妥恰梦谜;adb restore 命令允許用戶指定一個(gè)恢復(fù)的數(shù)據(jù)來源(即備份的應(yīng)用數(shù)據(jù))來恢復(fù)應(yīng)用程序數(shù)據(jù)的創(chuàng)建。因此袭景,當(dāng)一個(gè)應(yīng)用數(shù)據(jù)被備份之后唁桩,用戶即可在其他Android手機(jī)或模擬器上安裝同一個(gè)應(yīng)用,以及通過恢復(fù)該備份的應(yīng)用數(shù)據(jù)到該設(shè)備上耸棒,在該設(shè)備上打開該應(yīng)用即可恢復(fù)到被備份的應(yīng)用程序的狀態(tài)荒澡。尤其是通訊錄應(yīng)用,一旦應(yīng)用程序支持備份和恢復(fù)功能与殃,攻擊者即可通過adb backup和adb restore進(jìn)行恢復(fù)新安裝的同一個(gè)應(yīng)用來查看聊天記錄等信息单山;對于支付金融類應(yīng)用,攻擊者可通過此來進(jìn)行惡意支付幅疼、盜取存款等米奸;因此為了安全起見,開發(fā)者務(wù)必將allowBackup標(biāo)志值設(shè)置為false來關(guān)閉應(yīng)用程序的備份和恢復(fù)功能爽篷,以免造成信息泄露和財(cái)產(chǎn)損失悴晰。
網(wǎng)上也可以看到很多將 allowBackup 設(shè)置為 true 帶來的許多風(fēng)險(xiǎn),可以看看這篇博客:<a >詳解Android App AllowBackup配置帶來的風(fēng)險(xiǎn)</a>。
android:backupAgent
android:backupAgent="string"
android:backupAgent 這個(gè)標(biāo)識(shí)是用來設(shè)置備份代理铡溪,對于大部分應(yīng)用程序來說漂辐,都或多或少保存著一些持久性的數(shù)據(jù),比如數(shù)據(jù)庫和共享文件或者有自己的配置信息棕硫,為了保證這些數(shù)據(jù)和配置信息的安全性以及完整性髓涯,Android提供了這樣一個(gè)機(jī)制,我們可以通過這個(gè)備份機(jī)制來保存配置信息和數(shù)據(jù)以便為應(yīng)用程序提供恢復(fù)點(diǎn)哈扮。如果用戶將設(shè)備恢復(fù)出廠設(shè)置或者轉(zhuǎn)換到一個(gè)新的Android設(shè)備上复凳,系統(tǒng)就會(huì)在應(yīng)用程序重新安裝時(shí)自動(dòng)恢復(fù)備份數(shù)據(jù)。這樣灶泵,用戶就不需要重新產(chǎn)生它們以前的數(shù)據(jù)或者設(shè)置了育八。這個(gè)進(jìn)程對于用戶是完全透明的,并且不影響其自身的功能或者應(yīng)用程序的用戶體驗(yàn)赦邻。要實(shí)現(xiàn)備份代理髓棋,就必須做兩件事,一是實(shí)現(xiàn) BackupAgent 或者 BackupAgentHelper 的子類惶洲,二是在 Manifest 文件內(nèi)用 android:backupAgent 屬性聲明備份代理按声。
android:backupInForeground
android:backupInForeground=["true" | "false"]
這個(gè)標(biāo)識(shí)用來表明Auto Backup for Apps功能是否可以在應(yīng)用在前臺(tái)的時(shí)候進(jìn)行數(shù)據(jù)的備份。Auto Backup for Apps功能是 Android 6.0 引入的一個(gè)新功能恬吕,它允許一個(gè)應(yīng)用將自己的備份數(shù)據(jù)保存到 Google Drive 上面签则,每個(gè)用戶可以免費(fèi)保存 25M 的應(yīng)用數(shù)據(jù),這個(gè)新功能需要配合 android:allowBackup 一起使用铐料。
這個(gè)標(biāo)識(shí)的默認(rèn)值為 false 渐裂,這意味著系統(tǒng)不會(huì)備份一個(gè)應(yīng)用的數(shù)據(jù),如果這個(gè)應(yīng)用運(yùn)行在前臺(tái)(比如一個(gè)音樂軟件的后臺(tái)播放 service 是通過 startForeground 打開的)钠惩。
android:banner
android:banner="drawable resource"
這個(gè)標(biāo)識(shí)是用在 Android TV 電視上用輪播圖來代表一個(gè)應(yīng)用柒凉,由于輪播圖只是在 HOME 界面上顯示的,所以它僅僅只能被一個(gè)帶有能夠處理 CATEGORY_LEANBACK_LAUNCHER intent Activity 的應(yīng)用聲明篓跛。由于這個(gè)標(biāo)識(shí)是 Android TV 開發(fā)使用到的膝捞,在這里就不詳細(xì)介紹了,具體的可以看 Google 的 API 文檔愧沟。
android:debuggable
android:debuggable=["true" | "false"]
這個(gè)標(biāo)識(shí)用來表明該應(yīng)用是否可以被調(diào)試蔬咬,默認(rèn)值為 false.
android:description
android:description="string resource"
用來聲明關(guān)于這個(gè)應(yīng)用的詳細(xì)說明,用戶可讀的沐寺,必須使用 @string 的樣式來聲明林艘,這個(gè)聲明要比 label 標(biāo)簽聲明的文字更加詳細(xì),而且和 label 不一樣芽丹,這個(gè)標(biāo)識(shí)不能夠使用 raw string北启。
android:enabled
這個(gè)標(biāo)識(shí)用來表明系統(tǒng)能否實(shí)例化這個(gè)應(yīng)用的組件,true 代表可以,false 代表不可以咕村,如果此值設(shè)為 true场钉,則由每個(gè)組件的 enabled 屬性確定自身的啟用或禁用,如果此值設(shè)為 false 懈涛,則覆蓋組件的設(shè)置值逛万,所有組件都將被禁用。該標(biāo)識(shí)的默認(rèn)值是 true 批钠。
android:extractNativeLibs
android:extractNativeLibs=["true" | "false"]
這個(gè)標(biāo)識(shí)為 android 6.0 引入宇植,該屬性如果設(shè)置為 false,則系統(tǒng)在安裝應(yīng)用的時(shí)候不會(huì)把 so 文件從 apk 中解壓出來了,同時(shí)修改 System.loadLibrary 直接打開調(diào)用 apk 中的 so 文件埋心。但是指郁,目前要讓該技巧生效還需要額外2個(gè)條件:一個(gè)是apk 中的 .so 文件不能被壓縮;二個(gè)是 .so 必須用 zipalign -p 4 來對齊拷呆。該標(biāo)識(shí)的默認(rèn)值為 true闲坎。
android:fullBackupContent
android:fullBackupContent="string"
這個(gè)標(biāo)識(shí)用來指明備份的數(shù)據(jù)的規(guī)則,該標(biāo)識(shí)當(dāng)然是配合Auto Backup for Apps來使用的茬斧,它也是在 Android 6.0 中引入的腰懂,使用的方式如下所示:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.my.appexample">
...
<app ...
android:fullBackupContent="@xml/mybackupscheme">
</app>
...
</manifest>
在此示例代碼中,android:fullBackupContent 屬性指定了一個(gè) XML 文件项秉。該文件名為mybackupscheme.xml绣溜,位于應(yīng)用開發(fā)項(xiàng)目的 res/xml/ 目錄中。 此配置文件包括關(guān)于要備份哪些文件的規(guī)則娄蔼。 下列示例代碼顯示了將某一特定文件排除在備份之外的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="database" path="device_info.db"/>
</full-backup-con
此示例備份配置僅將一個(gè)特定數(shù)據(jù)庫文件排除在備份之外怖喻,所有其他文件均予以備份。
android:fullBackupOnly
android:fullBackupOnly=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指明當(dāng)Auto Backup for Apps功能可以使用的時(shí)候是否開啟它贷屎。如果該標(biāo)識(shí)設(shè)置為 true罢防,在 Android 6.0 以及之上的手機(jī)上艘虎,應(yīng)用將會(huì)執(zhí)行Auto Backup for Apps功能唉侄,在之前的 Android 版本中,你的應(yīng)用將會(huì)自動(dòng)忽略該標(biāo)識(shí)野建,并且切換成 Key/Value Backups属划。
android:hasCode
android:hasCode=["true" | "false"]
該標(biāo)識(shí)用來指明應(yīng)用程序是否包含代碼,“true”表示包含候生,“false”表示不包含同眯。 如果此值設(shè)為“false”,則在啟動(dòng)組件時(shí)系統(tǒng)不會(huì)試圖裝載任何程序代碼唯鸭。 默認(rèn)值是“true”须蜗。
應(yīng)用程序不包含任何自有代碼的情況極少發(fā)生。 僅當(dāng)只用到了內(nèi)置的組件類時(shí)才有可能,比如使用了AliasActivity 類的 Activity明肮。
android:hardwareAccelerated
android:hardwareAccelerated=["true" | "false"]
是否為應(yīng)用程序中所有的 Activity 和 View 啟用硬件加速渲染功能 —“true”表示開啟菱农,“false”表示關(guān)閉。 如果 minSdkVersion 或 targetSdkVersion 的值大于等于“14”柿估,則本屬性默認(rèn)值是“true”,否則循未,默認(rèn)值為“false”。
自 Android 3.0 (API 級別 11)開始秫舌,應(yīng)用程序可以使用硬件加速的 OpenGL 渲染功能來提高很多常用 2D 圖形操作的性能的妖。 當(dāng)開啟硬件加速渲染功能時(shí),大部分 Canvas足陨、Paint嫂粟、Xfermode、ColorFilter墨缘、Shader 和 Camera 中的操作都會(huì)被加速赋元。 即便應(yīng)用程序沒有顯式地調(diào)用系統(tǒng)的 OpenGL 庫,這仍能使動(dòng)畫更加平滑飒房、屏幕滾動(dòng)也更加流暢搁凸、整體響應(yīng)速度獲得改善。
請注意狠毯,并非所有的 OpenGL 2D 操作都會(huì)被加速护糖。 如果開啟了硬件加速渲染功能,請對應(yīng)用程序進(jìn)行測試以確保使用渲染時(shí)不會(huì)出錯(cuò)嚼松。更多詳細(xì)的操作可以去查看 google 文檔硬件加速指南嫡良。
android:icon
android:icon="drawable resource"
代表整個(gè)應(yīng)用程序的圖標(biāo),也即應(yīng)用程序中每個(gè)組件的默認(rèn)圖標(biāo)献酗。 請參閱 < activity >寝受、 < activity-alias >、 < service >罕偎、 < receiver > 和< provider > 元素各自的icon屬性很澄。本屬性必須設(shè)為對 drawable 資源的引用(例如“ @drawable/icon ”)。 圖標(biāo)沒有默認(rèn)值颜及。
必須要注意到的是這個(gè)標(biāo)識(shí)和下面要介紹到的 android:logo
標(biāo)簽不一樣甩苛,這個(gè)標(biāo)簽是在桌面顯示的圖標(biāo),而后者是在 actionBar 或者 toolBar 上面顯示的俏站。
android:isGame
android:isGame=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指明該應(yīng)用是否是游戲讯蒲,這樣就能夠?qū)⒃搼?yīng)用和其他應(yīng)用分離開來,默認(rèn)的改值為 false肄扎。
android:killAfterRestore
android:killAfterRestore=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指明在手機(jī)恢復(fù)出廠設(shè)置之后墨林,該應(yīng)用的所有設(shè)置信息都被重置時(shí)赁酝,該應(yīng)用是否需要被殺死,單個(gè)應(yīng)用的重置設(shè)置操作一般不會(huì)造成應(yīng)用的關(guān)閉旭等,整個(gè)系統(tǒng)的重置操作一般只會(huì)發(fā)生一次赞哗,那就是手機(jī)第一次進(jìn)入系統(tǒng)時(shí)的初始化設(shè)置,第三方應(yīng)用一般情況下不需要用到該標(biāo)識(shí)辆雾,
默認(rèn)該值為 true肪笋,這表明系統(tǒng)重置設(shè)置之后,應(yīng)用程序?qū)⒃谔幚頂?shù)據(jù)完成后被關(guān)閉度迂。
android:largeHeap
android:largeHeap=["true" | "false"]
這個(gè)標(biāo)識(shí)用來表明這個(gè)應(yīng)用的進(jìn)程是否需要更大的運(yùn)行內(nèi)存空間藤乙,這個(gè)標(biāo)識(shí)對該應(yīng)用的所有進(jìn)程都有效,但是需要注意的一點(diǎn)是惭墓,這僅僅對第一個(gè)加載進(jìn)這個(gè)進(jìn)程的應(yīng)用起作用坛梁,如果用戶通過 sharedUserId 將多個(gè)應(yīng)用置于同一個(gè)進(jìn)程(SharedUserId 的具體用法可以參考我的博客:android IPC通信(上)-sharedUserId&&Messenger),那么兩個(gè)應(yīng)用都必須要指定該標(biāo)識(shí)并且設(shè)置為同一個(gè)值腊凶,要不然就會(huì)產(chǎn)生意想不到的結(jié)果划咐。
大部分應(yīng)用程序不需要用到本屬性,而是應(yīng)該關(guān)注如何減少內(nèi)存消耗以提高性能钧萍。 使用本屬性并不能確保一定會(huì)增加可用的內(nèi)存褐缠,因?yàn)槟承┰O(shè)備可用的內(nèi)存本來就很有限。
要在運(yùn)行時(shí)查詢可用的內(nèi)存大小风瘦,請使用 getMemoryClass() 或getLargeMemoryClass() 方法队魏,后者的方法可以獲取到應(yīng)用開啟 largeHeap 之后可以獲得的內(nèi)存大小。
這里說到一點(diǎn)是万搔,一個(gè)應(yīng)用不應(yīng)該通過這個(gè)屬性來解決 OOM 問題胡桨,而是應(yīng)該通過檢測內(nèi)存泄漏來徹底根治 OOM,而且當(dāng)內(nèi)存很大的時(shí)候瞬雹,每次gc的時(shí)間也會(huì)長一些昧谊,性能也會(huì)隨之下降。
android:label
android:label="string resource"
這個(gè)標(biāo)簽應(yīng)該是很常用的一個(gè)標(biāo)簽酗捌,它供用戶閱讀的代表整個(gè)應(yīng)用程序的文本標(biāo)簽呢诬,也即應(yīng)用程序中每個(gè)組件的默認(rèn)標(biāo)簽。 請參閱 < activity >意敛、 < activity-alias >馅巷、 < service >、 < receiver > 和< provider > 元素各自的 label 屬性草姻。
文本標(biāo)簽應(yīng)設(shè)為一個(gè)字符串資源的引用,這樣就能像其它用戶界面內(nèi)的字符串一樣對其進(jìn)行本地化稍刀。 不過撩独,考慮到開發(fā)時(shí)的便利性敞曹,也可以將其直接設(shè)為字符串。
android:logo
android:logo="drawable resource"
這個(gè)標(biāo)識(shí)指定了整個(gè)應(yīng)用程序的 logo 標(biāo)識(shí)综膀,也即各 Activity 的默認(rèn) logo澳迫。
本屬性必須設(shè)為對 drawable 資源的引用,該資源中包含了圖片文件(例如“@drawable/logo”)剧劝。 logo 沒有默認(rèn)值橄登。上面也介紹到了和 android:icon
的區(qū)別,這個(gè)是在 actionBar 或者 toolBar 上面展示的讥此,icon 屬性是在桌面顯示的拢锹。
android:manageSpaceActivity
android:manageSpaceActivity="string"
這個(gè)標(biāo)識(shí)用來指定一個(gè) Activity 的名字,當(dāng)用戶在設(shè)置頁面中手動(dòng)點(diǎn)擊清除數(shù)據(jù)按鈕時(shí)萄喳,不會(huì)像以前一樣把應(yīng)用的私有目錄/data/data/包名下的數(shù)據(jù)完全清除卒稳,而是跳轉(zhuǎn)到那個(gè)聲明的 activity 中,讓用戶遵照 activity 中提供的功能清除指定的數(shù)據(jù)他巨。
感興趣的可以看看該鏈接:android:manageSpaceActivity讓應(yīng)用手動(dòng)管理應(yīng)用的數(shù)據(jù)目錄
android:name
android:name="string"
該標(biāo)識(shí)用來指定該應(yīng)用程序 Application 子類的完全限定名稱充坑,該類將優(yōu)先于所有程序組件被實(shí)例化,該子類是可選的染突,根據(jù)應(yīng)用程序的實(shí)際需求看是否使用捻爷,但是大多數(shù)應(yīng)用程序都有使用,如果沒有提供該 Application 子類時(shí)份企,Android 將使用 Application 類的實(shí)例役衡。
android:permission
android:permission="string"
該標(biāo)識(shí)用來指定客戶端要與應(yīng)用程序交互而必須擁有的權(quán)限名稱,本屬性為一次設(shè)置適用于全部程序組件的權(quán)限提供了一個(gè)便捷途徑薪棒,它可以被組件各自的 permission 屬性覆蓋手蝎,這個(gè)就相當(dāng)于把 permission 標(biāo)簽設(shè)置給了應(yīng)用里面的每個(gè) Activity,Service 等等四大組件俐芯,詳細(xì)的可以查看 google 文檔的權(quán)限或者另一篇文檔安全與權(quán)限棵介。
或者可以看看這篇對于 permission 的博客:android permission權(quán)限與安全機(jī)制解析(上)咙轩。
android:persistent
android:permission="string"
該標(biāo)識(shí)用來指明一個(gè)應(yīng)用程序是否需要一直保持運(yùn)行狀態(tài)腾么,true 代表是存和,false 代表否缰犁,默認(rèn)值是 false本昏。一般的第三方應(yīng)用是不應(yīng)該設(shè)置該標(biāo)識(shí)的骆捧,持久運(yùn)行模式適用于某些特定的系統(tǒng)應(yīng)用候学,比如通話歧寺,短信等應(yīng)用钞脂,而且該應(yīng)用在異常崩潰出現(xiàn)后揣云,雖然這種情況很稀少,會(huì)立即重啟冰啃,所以該標(biāo)識(shí)第三方應(yīng)用設(shè)置之后是不好用的邓夕。
這個(gè)標(biāo)識(shí)的詳細(xì)剖析可以看看這個(gè)博客:android persistent屬性研究刘莹。
android:process
android:process="string"
應(yīng)用程序的全部組件都將運(yùn)行于其中的進(jìn)程名稱。 每個(gè)組件通過設(shè)置各自的 process 屬性焚刚,可以覆蓋本缺省值点弯。
默認(rèn)情況下,當(dāng)運(yùn)行應(yīng)用程序的第一個(gè)組件時(shí)矿咕,Android 會(huì)為程序創(chuàng)建一個(gè)進(jìn)程抢肛。 然后所有組件都會(huì)運(yùn)行在這個(gè)進(jìn)程中。 默認(rèn)進(jìn)程的名稱與應(yīng)用程序里面設(shè)置的 package 包名一致碳柱。
通過將本屬性設(shè)置為其他應(yīng)用程序的進(jìn)程名稱捡絮,可以讓兩個(gè)應(yīng)用程序的組件運(yùn)行于同一個(gè)進(jìn)程中 — 但只有這兩個(gè)應(yīng)用程序使用 sharedUserId 指定為同一個(gè) userId 并用要用同一個(gè)證書簽名時(shí)才行。
如果賦予本屬性的名稱是以冒號(':')開頭的士聪,則必要時(shí)將會(huì)為應(yīng)用程序創(chuàng)建一個(gè)新的私有進(jìn)程锦援。 如果進(jìn)程名稱以小寫字母開頭,則將創(chuàng)建以此名稱命名的全局進(jìn)程剥悟。 全局進(jìn)程可以被其他應(yīng)用程序共享灵寺,以減少資源的占用。
android:restoreAnyVersion
android:restoreAnyVersion=["true" | "false"]
該標(biāo)識(shí)用來指明一個(gè)應(yīng)用程序可以通過任何版本的備份數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù)区岗,就算該備份數(shù)據(jù)是從當(dāng)前安裝版本的更新版本應(yīng)用備份出來的略板,把這個(gè)標(biāo)識(shí)設(shè)置為 true 之后,Backup Manager 將會(huì)從一個(gè)不匹配版本的備份數(shù)據(jù)進(jìn)行數(shù)據(jù)恢復(fù)操作慈缔,即使發(fā)生版本沖突也即數(shù)據(jù)版本不兼容時(shí)也是如此叮称。 使用本屬性時(shí)一定要特別小心。該標(biāo)識(shí)的默認(rèn)值為 false藐鹤。
android:requiredAccountType
android:requiredAccountType="string"
該標(biāo)識(shí)為 API18 版本添加瓤檐,設(shè)定應(yīng)用程序所需的賬戶類型。 如果應(yīng)用程序需要一個(gè) Account 才能運(yùn)行娱节,本屬性值必須與賬戶的認(rèn)證類型(由 AuthenticatorDescription 定義)吻合挠蛉,比如“com.google”。默認(rèn)值是 null肄满,表示應(yīng)用程序不需要任何賬戶就可以運(yùn)行谴古。因?yàn)槟壳暗氖芟抻脩襞渲霉δ埽≧estricted Profile)無法添加賬戶,設(shè)定本屬性的應(yīng)用程序?qū)τ谑芟抻脩舳允遣豢捎玫模?除非你同時(shí)將 android:restrictedAccountType 也聲明為相同的值稠歉。
提醒:如果賬戶數(shù)據(jù)可能會(huì)泄露個(gè)人身份信息掰担,聲明本屬性就很重要了,并且要把 android:restrictedAccountType 設(shè)置為 null 怒炸,這樣受限用戶就無法用你的應(yīng)用程序來訪問機(jī)主的個(gè)人信息了带饱。
android:restrictedAccountType
android:restrictedAccountType="string"
該標(biāo)識(shí)和 android:requiredAccountType 一樣也是 API18 添加,但是和 android:requiredAccountType 不一樣的是該屬性如果設(shè)置了后横媚,將會(huì)允許受限用戶訪問機(jī)主的該賬戶纠炮,如果應(yīng)用程序需要使用 Account 并且允許受限用戶訪問主賬戶月趟,本屬性值必須與應(yīng)用程序的賬戶認(rèn)證類型(由 AuthenticatorDescription 定義)吻合灯蝴,比如“com.google”恢口。默認(rèn)值為 null ,表示應(yīng)用程序不需要 任何賬戶就可以運(yùn)行穷躁。
提醒:設(shè)置本屬性將允許受限用戶通過主賬戶使用你的應(yīng)用程序耕肩,這可能會(huì)泄露個(gè)人身份信息。 如果賬戶可能會(huì)泄露個(gè)人信息问潭,請勿使用本屬性猿诸,而是使用 android:requiredAccountType 屬性,以禁止受限用戶的使用狡忙。
android:resizeableActivity
android:resizeableActivity=["true" | "false"]
這個(gè)標(biāo)識(shí)用來表明應(yīng)用是否支持分屏操作梳虽,這個(gè)標(biāo)識(shí)可以設(shè)置在 < activity > 或者 <application> 標(biāo)簽上。如果把這個(gè)屬性設(shè)置為 true灾茁,用戶就能把這個(gè)應(yīng)用或者 activity 設(shè)置為分屏或者自由模式窜觉,如果這個(gè)標(biāo)識(shí)設(shè)置為 false,該應(yīng)用或者 activity 將不支持多窗口的分屏模式北专,如果用戶試圖使用分屏模式打開該 activity禀挫,這個(gè)應(yīng)用也只會(huì)充滿整個(gè)屏幕。
如果你應(yīng)用的 targetAPI 是 24 版本或者更高拓颓,雖然你沒有顯示的聲明該標(biāo)識(shí)的值语婴,這個(gè)標(biāo)識(shí)的默認(rèn)值為 true。這個(gè)標(biāo)識(shí)是在 API24 版本添加驶睦。
android:supportsRtl
android:supportsRtl=["true" | "false"]
這個(gè)標(biāo)識(shí)是用來聲明應(yīng)用是否要支持從右到左的(RTL)布局方式砰左。
如果本標(biāo)識(shí)屬性設(shè)置為 true 并且同時(shí) targetSdkVersion 為 17 或者以上版本,則系統(tǒng)將會(huì)激活并使用各種 RTL API 场航,應(yīng)用程序就可以顯示 RTL Layout缠导。 如果本屬性設(shè)為 false 或者 targetSdkVersion 為 16 以下版本,則 RTL API 將會(huì)被忽略或失效旗闽,應(yīng)用程序?qū)⒑雎耘c Layout 方向有關(guān)的用戶本地化選項(xiàng)(Layout 都將從左到右布局)酬核。本屬性的默認(rèn)值是 false,為 API17 版本添加适室。
android:taskAffinity
android:taskAffinity="string"
該標(biāo)識(shí)將會(huì)對應(yīng)用的所有 activity 生效嫡意,除非該 activity 設(shè)置了自己單獨(dú)的 taskAffinity 。一般情況下捣辆,在沒有顯示設(shè)置該標(biāo)識(shí)的情況下蔬螟,應(yīng)用的所有 activity 都有同一個(gè) affinity ,該 affinity 名字默認(rèn)為 package 的名字汽畴。
關(guān)于 taskAffinity 和 launchMode 的詳細(xì)介紹和用法可以看看我的這篇博客:android深入解析Activity的launchMode啟動(dòng)模式旧巾,Intent Flag耸序,taskAffinity。
android:testOnly
android:testOnly=["true" | "false"]
該標(biāo)識(shí)用來指明這個(gè)應(yīng)用是不是僅僅作為測試的用途鲁猩,比如坎怪,本應(yīng)用程序可能會(huì)暴露一些不屬于自己的功能或數(shù)據(jù),這將引發(fā)安全漏洞廓握,但對測試而言這又非常有用搅窿,而且這種應(yīng)用程序只能通過 adb 進(jìn)行安裝。
android:theme
android:theme="resource or theme"
這個(gè)標(biāo)識(shí)用來聲明這個(gè)應(yīng)用的所有 activity 的主題隙券,單獨(dú)的一個(gè) activity 可以聲明自己的 theme 主題來覆蓋默認(rèn)的屬性男应,具體的可以查看 google 的官方文檔:樣式和主題。
android:uiOptions
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
這個(gè)標(biāo)識(shí)用來指定這個(gè)應(yīng)用所有的 Activity 的 UI 附加選項(xiàng)娱仔,它有兩個(gè)值:
Value | Description |
---|---|
"none" | 沒有其他的 UI 選項(xiàng)沐飘,改值為這個(gè)標(biāo)識(shí)的默認(rèn)值 |
"splitActionBarWhenNarrow" | 當(dāng)水平空間受限時(shí)(例如在手持設(shè)備上的縱向模式下時(shí))在屏幕底部添加一個(gè)欄以顯示應(yīng)用欄(也稱為操作欄)中的操作項(xiàng)。 應(yīng)用欄不是以少量操作項(xiàng)形式出現(xiàn)在屏幕頂部的應(yīng)用欄中牲迫,而是分成了頂部導(dǎo)航區(qū)和底部操作項(xiàng)欄耐朴。 這可以確保操作項(xiàng)以及頂部的導(dǎo)航和標(biāo)題元素都能獲得合理的空間。 菜單項(xiàng)不會(huì)拆分到兩個(gè)欄中恩溅,它們始終一起出現(xiàn)隔箍。 |
這個(gè)標(biāo)識(shí)在 API14 版本添加,一般情況下很少會(huì)用到這個(gè)標(biāo)識(shí)脚乡,我曾經(jīng)只在魅族手機(jī)的適配過程中用到了這個(gè)標(biāo)識(shí)蜒滩,想要了解詳細(xì)的適配,可以去看看 google 官方的官方教程添加應(yīng)用欄奶稠。
android:usesCleartextTraffic
android:usesCleartextTraffic=["true" | "false"]
這個(gè)標(biāo)識(shí)為 API23 版本也就是 Android M 添加俯艰,它用來指明應(yīng)用是否需要使用明文的網(wǎng)絡(luò)連接,例如明文的 HTTP 連接锌订,這個(gè)標(biāo)識(shí)的默認(rèn)值為 true竹握。
當(dāng)這個(gè)標(biāo)識(shí)設(shè)置為 false 的時(shí)候,平臺(tái)的組件(例如辆飘,HTTP 和 FTP 棧啦辐,DownloadManager,MediaPlayer)將會(huì)拒絕應(yīng)用使用明文的請求蜈项。第三方的庫強(qiáng)烈建議也遵守這個(gè)設(shè)置芹关,避免使用明文請求連接的核心原因是會(huì)缺少機(jī)密性,可靠性紧卒,而且可以保護(hù)請求不受到惡意的篡改:一個(gè)網(wǎng)絡(luò)攻擊者可能會(huì)監(jiān)聽網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)侥衬,而且能夠在不被檢測的情況下修改這些數(shù)據(jù)。
當(dāng)然這個(gè)標(biāo)識(shí)也只是在最理想的情況下去遵守的,因?yàn)榭紤]到 Android 應(yīng)用被提供的使用等級轴总,是不可能避免他們所有的明文請求直颅。例如,Socket API 就不一定需要遵守這個(gè)標(biāo)識(shí)怀樟,因?yàn)樗膊荒軟Q定這個(gè)鏈接是不是明文功偿。然而,多數(shù)的應(yīng)用網(wǎng)絡(luò)請求連接都被高層次的網(wǎng)絡(luò)棧/組件所處理漂佩,而這些棧/組件可以通過讀取 ApplicationInfo.flags 或者 NetworkSecurityPolicy.isCleartextTrafficPermitted()來遵守這個(gè)標(biāo)識(shí)脖含。
需要注意的是 WebView 不需要遵守這個(gè)標(biāo)識(shí)罪塔。在 app 的開發(fā)過程中投蝉,也可以使用 StrictMode 來檢測明文的請求連接,使用方式為 StrictMode.VmPolicy.Builder.detectCleartextNetwork().
當(dāng)usesCleartextTraffic被設(shè)置為false征堪,應(yīng)用程序會(huì)在使用HTTP而不是HTTPS時(shí)崩潰瘩缆。
在 API24 也就是 Android 7.0 及以上版本中,如果配置了 Android Network Security 佃蚜,那么這個(gè)標(biāo)識(shí)將會(huì)被自動(dòng)忽略庸娱。
android:vmSafeMode
android:vmSafeMode=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指明這個(gè)應(yīng)用是否想讓 VM 虛擬機(jī)運(yùn)行在安全模式,默認(rèn)值為 false谐算,這個(gè)標(biāo)識(shí)是 API8 版本添加斤儿,如果設(shè)置為 true 將會(huì)禁用 Dalvik just-in-time(JIT)編譯器,這個(gè)標(biāo)識(shí)在 API22 版本之后為新版本做了改進(jìn)往果,因?yàn)?4.4 之后 Dalvik 虛擬機(jī)就被廢棄了一铅,在 22 版本之后這個(gè)標(biāo)識(shí)如果設(shè)置為 true 將會(huì)禁用 ART ahead-of-time(AOT)編譯器陕贮。
詳細(xì)的可以看看這篇介紹:ART、JIT戈擒、AOT、Dalvik之間有什么關(guān)系凯傲?
Activity 標(biāo)簽
android:allowEmbedded
android:allowEmbedded=["true" | "false"]
這個(gè)標(biāo)識(shí)一般為開發(fā)可穿戴設(shè)備時(shí)使用幌缝,表示該 Activity 可作為另一 Activity 的嵌入式子項(xiàng)啟動(dòng)涵卵。 它尤其適用于子項(xiàng)所在的容器(如 Display)為另一 Activity 所擁有的情況轿偎。 例如坏晦,用于 Wear 自定義通知的 Activity 必須聲明此項(xiàng),以便 Wear 在其上下文流中顯示 Activity,后者位于另一進(jìn)程中看疙。該屬性的默認(rèn)值為 false。
android:allowTaskReparenting
android:allowTaskReparenting=["true" | "false"]
這個(gè)標(biāo)示和 Application 的標(biāo)識(shí)意義一樣相味,所以如果同時(shí)聲明該標(biāo)識(shí),這個(gè)標(biāo)識(shí)會(huì)覆蓋 Application 的標(biāo)識(shí),
android:alwaysRetainTaskState
android:alwaysRetainTaskState=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指示系統(tǒng)是否始終保持 Activity 所在任務(wù)的狀態(tài) —“true”表示保持投慈,“false”表示允許系統(tǒng)在特定情況下將任務(wù)重置到其初始狀態(tài)加袋。 默認(rèn)值為“false”。該屬性只對任務(wù)的根 Activity 有意義;對于所有其他 Activity足删,均忽略該屬性。
正常情況下峻厚,當(dāng)用戶從主屏幕重新選擇某個(gè)任務(wù)時(shí)惠桃,系統(tǒng)會(huì)在特定情況下清除該任務(wù)(從根 Activity 之上的堆棧中移除所有 Activity)劈狐。 系統(tǒng)通常會(huì)在用戶一段時(shí)間(如 30 分鐘)內(nèi)未訪問任務(wù)時(shí)執(zhí)行此操作。
不過,如果該屬性的值是“true”坟岔,則無論用戶如何到達(dá)任務(wù),將始終返回到最后狀態(tài)的任務(wù)纪隙。 例如,在網(wǎng)絡(luò)瀏覽器這類存在大量用戶不愿失去的狀態(tài)(如多個(gè)打開的標(biāo)簽)的應(yīng)用中悲伶,該屬性會(huì)很有用。
這個(gè)有點(diǎn)抽象,舉個(gè)例子碱屁,打開客戶端的順序是 SplashActivity --> GuideActivity --> MainActivity(歡迎頁面 --> 功能引導(dǎo)頁面 --> 主頁面)打毛,那么碰声,它在任務(wù)棧中就是:
由于我們在 Androidmanifest.xml 文件中,給 SplashActivity 設(shè)置 android:alwaysRetainTaskState='true',當(dāng)我們按 HOME 鍵返回桌面蘸朋,任務(wù)棧的狀態(tài)被保留著团南,當(dāng)我們點(diǎn)擊應(yīng)用圖標(biāo)打開再次應(yīng)用時(shí),系統(tǒng)會(huì)判斷是否已經(jīng)存在以 SplashActivity 為根 Activity 的棧,如果有冗疮,那么就直接使用該棧,并顯示棧頂?shù)?Activity。注意,只需要設(shè)置根 Activity 就可以了毒嫡。
android:autoRemoveFromRecents
android:autoRemoveFromRecents=["true" | "false"]
這個(gè)標(biāo)識(shí)為 API21 版本添加努释,由具有該屬性的 Activity 啟動(dòng)的任務(wù)是否一直保留在概覽屏幕中,直至任務(wù)中的最后一個(gè) Activity 完成為止恩沛。 若為 true,則自動(dòng)從概覽屏幕中移除任務(wù)皱卓。 它會(huì)替換調(diào)用方使用的 FLAG_ACTIVITY_RETAIN_IN_RECENTS。 它必須是布爾值“true”或“false”。
android:banner
android:banner="drawable resource"
這個(gè)和 application 里面的 banner 標(biāo)識(shí)一樣,也是用在 android TV 上的享完,在這里也不詳細(xì)介紹了巍佑,可以去看看 google 官方文檔。
android:clearTaskOnLaunch
android:clearTaskOnLaunch=["true" | "false"]
這個(gè)標(biāo)識(shí)用來指明當(dāng)應(yīng)用從主屏幕重新啟動(dòng)時(shí)是否都從中移除除根 Activity 之外的所有 Activity倦卖,true 表示始終將任務(wù)清除到只剩其根 Activity秦踪,false 表示不清除柠逞,默認(rèn)值為 false。需要注意的是該屬性只對啟動(dòng)新任務(wù)的 Activity(根 Activity)有意義慕购;對于任務(wù)中的所有其他 Activity,均忽略該屬性殿如。當(dāng)值為“false”時(shí)爱致,可在某些情況下清除任務(wù)中的 Activity(參考結(jié)合 alwaysRetainTaskState 屬性)帮坚,但并非一律可以。如果該屬性和 allowTaskReparenting 的值均為“true”,則如上所述,任何可以更改父項(xiàng)的 Activity 都將轉(zhuǎn)移到與其有親和關(guān)系的任務(wù);其余 Activity 隨即被移除。
例如,假定有人從主屏幕啟動(dòng)了 Activity P,然后從那里轉(zhuǎn)到 Activity Q晓铆。該用戶接著按了主屏幕按鈕,然后返回到 Activity P。正常情況下,用戶將看到 Activity Q陪蜻,因?yàn)槟鞘瞧渥詈笤?P 的任務(wù)中執(zhí)行的 Activity忱嘹。 不過齿兔,如果 P 將此標(biāo)志設(shè)置為“true”屁桑,則當(dāng)用戶按下主屏幕將任務(wù)轉(zhuǎn)入后臺(tái)時(shí),其上的所有 Activity(在本例中為 Q)都會(huì)被移除沟突。 因此用戶返回任務(wù)時(shí)只會(huì)看到 P庸论。
android:configChanges
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale",
"uiMode", "orientation", "screenSize",
"smallestScreenSize"]
列出 Activity 將自行處理的配置更改簇秒。在運(yùn)行時(shí)發(fā)生配置更改時(shí)气筋,默認(rèn)情況下會(huì)關(guān)閉 Activity 然后將其重新啟動(dòng)麸恍,但使用該屬性聲明配置將阻止 Activity 重新啟動(dòng)瓤球。 Activity 反而會(huì)保持運(yùn)行狀態(tài),并且系統(tǒng)會(huì)調(diào)用其 onConfigurationChanged() 方法欠肾。以下為該屬性的值拟赊,多個(gè)值使用“|”分隔 — 例如刺桃,“l(fā)ocale|navigation|orientation”:
Value | Description |
---|---|
“mcc” | IMSI 移動(dòng)國家/地區(qū)代碼 (MCC) 發(fā)生了變化 - 檢測到了 SIM 并更新了 MCC。 |
“mnc” | IMSI 移動(dòng)網(wǎng)絡(luò)代碼 (MNC) 發(fā)生了變化 - 檢測到了 SIM 并更新了 MNC吸祟。 |
locale” | 語言區(qū)域發(fā)生了變化 — 用戶為文本選擇了新的顯示語言。 |
“touchscreen” | 觸摸屏發(fā)生了變化屋匕。(這種情況通常永遠(yuǎn)不會(huì)發(fā)生封豪。) |
“keyboard” | 鍵盤類型發(fā)生了變化 — 例如,用戶插入了一個(gè)外置鍵盤炒瘟。 |
“keyboardHidden” | 鍵盤無障礙功能發(fā)生了變化 — 例如,用戶顯示了硬件鍵盤第步。 |
“navigation” | 導(dǎo)航類型(軌跡球/方向鍵)發(fā)生了變化疮装。(這種情況通常永遠(yuǎn)不會(huì)發(fā)生缘琅。) |
“screenLayout” | 屏幕布局發(fā)生了變化 — 這可能是由激活了其他顯示方式所致。 |
“fontScale” | 字體縮放系數(shù)發(fā)生了變化 — 用戶選擇了新的全局字號廓推。 |
“uiMode” | 用戶界面模式發(fā)生了變化 — 這可能是因用戶將設(shè)備放入桌面/車載基座或夜間模式發(fā)生變化所致刷袍。 請參閱 UiModeManager。 此項(xiàng)為 API 級別 8 中新增配置樊展。 |
“orientation” | 屏幕方向發(fā)生了變化 — 用戶旋轉(zhuǎn)了設(shè)備呻纹。 注:如果您的應(yīng)用面向 API 級別 13 或更高級別(按照 minSdkVersion 和 targetSdkVersion 屬性所聲明的級別), 則還應(yīng)聲明 "screenSize" 配置专缠,因?yàn)楫?dāng)設(shè)備在橫向與縱向之間切換時(shí)雷酪,該配置也會(huì)發(fā)生變化。 |
“screenSize” | 當(dāng)前可用屏幕尺寸發(fā)生了變化涝婉。它表示當(dāng)前可用尺寸相對于當(dāng)前縱橫比的變化哥力,因此會(huì)在用戶在橫向與縱向之間切換時(shí)發(fā)生變化。 不過墩弯,如果您的應(yīng)用面向 API 級別 12 或更低級別吩跋,則 Activity 始終會(huì)自行處理此配置變更 (即便是在 Android 3.2 或更高版本的設(shè)備上運(yùn)行,此配置變更也不會(huì)重新啟動(dòng) Activity)渔工。 ?此項(xiàng)為 API 級別 13 中新增配置锌钮。 |
“smallestScreenSize” | 物理屏幕尺寸發(fā)生了變化。它表示與方向無關(guān)的尺寸變化引矩,因此只有在實(shí)際物理屏幕尺寸發(fā)生變化(如切換到外部顯示器)時(shí)才會(huì)變化梁丘。 對此配置的變更對應(yīng)于smallestWidth 配置的變化。 不過脓魏,如果您的應(yīng)用面向 API 級別 12 或更低級別兰吟,則 Activity 始終會(huì)自行處理此配置變更 (即便是在 Android 3.2 或更高版本的設(shè)備上運(yùn)行,此配置變更也不會(huì)重新啟動(dòng) Activity)茂翔。 此項(xiàng)為 API 級別 13 中新增配置混蔼。 |
“l(fā)ayoutDirection” | 布局方向發(fā)生了變化。例如珊燎,從從左至右 (LTR) 更改為從右至左 (RTL)惭嚣。 此項(xiàng)為 API 級別 17 中新增配置。 |
所有這些配置變更都可能影響應(yīng)用看到的資源值悔政。 因此晚吞,調(diào)用 onConfigurationChanged() 時(shí),通常有必要再次獲取所有資源(包括視圖布局谋国、可繪制對象等)槽地,以正確處理變化。
我們平常接觸到最多的就是屏幕的旋轉(zhuǎn),屏幕的旋轉(zhuǎn)如果在沒有特殊設(shè)置的情況下會(huì)銷毀當(dāng)前的 Activity 重新創(chuàng)建一個(gè)新的捌蚊,為了避免創(chuàng)建新的集畅,就可以在 AndroidMainfest.xml 中對指定 Activity 對應(yīng)的 <activity> 配置android:configChanges="orientation",這樣缅糟,每次旋轉(zhuǎn)方向時(shí)挺智,只有 onConfigurationChanged 方法被調(diào)用,沒有了銷毀重建的過程窗宦。
android:documentLaunchMode
android:documentLaunchMode=["intoExisting" | "always" |
"none" | "never"]
指定每次啟動(dòng)任務(wù)時(shí)應(yīng)如何向其中添加新的 Activity 實(shí)例赦颇。 該屬性允許用戶讓多個(gè)來自同一應(yīng)用的文檔出現(xiàn)在概覽屏幕(recent app)中。該屬性有四個(gè)值赴涵,會(huì)在用戶使用該應(yīng)用打開文檔時(shí)產(chǎn)生以下效果:
Value | Description |
---|---|
“intoExisting” | Activity 會(huì)為文檔重復(fù)使用現(xiàn)有任務(wù)媒怯。使用該值與不設(shè)置 FLAG_ACTIVITY_MULTIPLE_TASK 標(biāo)志、但設(shè)置 FLAG_ACTIVITY_NEW_DOCUMENT 標(biāo)志所產(chǎn)生的效果相同句占,如使用 Intent 標(biāo)志添加任務(wù)中所述沪摄。 |
“always” | Activity 為文檔創(chuàng)建新任務(wù),即便文檔已打開也是如此纱烘。 這與同時(shí)設(shè)置 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標(biāo)志的效果相同杨拐。 |
“none” | 該 Activity 不會(huì)為 Activity 創(chuàng)建新任務(wù)。這是默認(rèn)值擂啥,它只會(huì)在設(shè)置了 FLAG_ACTIVITY_NEW_TASK 時(shí)創(chuàng)建新任務(wù)哄陶。 概覽屏幕將按其默認(rèn)方式對待此 Activity:為應(yīng)用顯示單個(gè)任務(wù),該任務(wù)將從用戶上次調(diào)用的任意 Activity 開始繼續(xù)執(zhí)行哺壶。 |
“never” | 即使 Intent 包含 FLAG_ACTIVITY_NEW_DOCUMENT屋吨,該 Activity 也不會(huì)啟動(dòng)到新文檔之中。 設(shè)置此值會(huì)替代 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標(biāo)志的行為(如果在 Activity 中設(shè)置了其中一個(gè)標(biāo)志)山宾,并且概覽屏幕將為應(yīng)用顯示單個(gè)任務(wù)至扰,該任務(wù)將從用戶上次調(diào)用的任意 Activity 開始繼續(xù)執(zhí)行。 |
注:對于除“none”和“never”以外的值资锰,必須使用 launchMode="standard" 定義 Activity敢课。 如果未指定此屬性,則使用 documentLaunchMode="none"绷杜。
感興趣的也可以看看android深入解析Activity的launchMode啟動(dòng)模式直秆,Intent Flag,taskAffinity博客中對于FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標(biāo)志的介紹鞭盟。
android:enabled
android:enabled=["true" | "false"]
該屬性用來標(biāo)示系統(tǒng)是否可將 Activity 實(shí)例化 — "true" 表示可以圾结,“false”表示不可以。 默認(rèn)值為“true”齿诉。
上面提到了 <application> 元素具有自己的 enabled 屬性筝野,該屬性適用于所有應(yīng)用組件宁赤,包括 Activity皂冰。 <application> 和 <activity> 屬性必須都是“true”(因?yàn)樗鼈兌寄J(rèn)使用該值)酪劫,系統(tǒng)才能將 Activity 實(shí)例化扼仲。 如果任何一個(gè)屬性是“false”,則無法進(jìn)行實(shí)例化途蒋。
android:excludeFromRecents
android:excludeFromRecents=["true" | "false"]
該標(biāo)識(shí)用來標(biāo)示是否應(yīng)將該 Activity 啟動(dòng)的任務(wù)排除在最近使用的應(yīng)用列表(即概覽屏幕)之外。 也就是說馋记,當(dāng)該 Activity 是新任務(wù)的根 Activity 時(shí)号坡,此屬性確定任務(wù)是否應(yīng)出現(xiàn)在最近使用的應(yīng)用列表中。 如果應(yīng)將任務(wù)排除在列表之外梯醒,請?jiān)O(shè)置“true”宽堆;如果應(yīng)將其包括在內(nèi),則設(shè)置“false”茸习。 默認(rèn)值為“false”畜隶。
android:exported
android:exported=["true" | "false"]
該標(biāo)識(shí)用來指明Activity 是否可由其他應(yīng)用的組件啟動(dòng) —“true”表示可以,“false”表示不可以号胚。若為“false”籽慢,則 Activity 只能由同一應(yīng)用的組件或使用同一用戶 ID 的不同應(yīng)用啟動(dòng)。
需要注意的是該默認(rèn)值取決于 Activity 是否包含 Intent 過濾器猫胁。沒有任何過濾器意味著 Activity 只能通過指定其確切的類名稱進(jìn)行調(diào)用箱亿。 這意味著 Activity 專供應(yīng)用內(nèi)部使用(因?yàn)槠渌麘?yīng)用不知曉其類名稱)。 因此弃秆,在這種情況下届惋,默認(rèn)值為“false”。另一方面菠赚,至少存在一個(gè)過濾器意味著 Activity 專供外部使用脑豹,因此默認(rèn)值為“true”。
該屬性并非限制 Activity 對其他應(yīng)用開放度的唯一手段衡查。 您還可以利用權(quán)限來限制哪些外部實(shí)體可以調(diào)用 Activity(請參閱 permission 屬性)瘩欺,具體的也可以看看android permission權(quán)限與安全機(jī)制解析(上)和android permission權(quán)限與安全機(jī)制解析(下)這兩篇博客,詳細(xì)描述了權(quán)限的相關(guān)峡捡。
這個(gè)標(biāo)識(shí)的使用例子可以參考android IPC通信(上)-sharedUserId&&Messenger击碗。
android:finishOnTaskLaunch
android:finishOnTaskLaunch=["true" | "false"]
該標(biāo)識(shí)用來標(biāo)示每當(dāng)用戶再次啟動(dòng)其任務(wù)(在主屏幕上選擇任務(wù))時(shí),是否應(yīng)關(guān)閉(完成)現(xiàn)有 Activity 實(shí)例 —“true”表示應(yīng)關(guān)閉们拙,“false”表示不應(yīng)關(guān)閉稍途。 默認(rèn)值為“false”。如果該屬性和 allowTaskReparenting 均為“true”砚婆,則優(yōu)先使用該屬性械拍。 Activity 的親和關(guān)系會(huì)被忽略突勇。 系統(tǒng)不是更改 Activity 的父項(xiàng),而是將其銷毀坷虑。
android:hardwareAccelerated
android:hardwareAccelerated=["true" | "false"]
該標(biāo)識(shí)用來表明是否應(yīng)為此 Activity 啟用硬件加速渲染 —“true”表示應(yīng)啟用甲馋,“false”表示不應(yīng)啟用,默認(rèn)值為“false”迄损。
和 application 的標(biāo)識(shí)不一樣的是定躏,該標(biāo)示只針對 Activity。
從 Android 3.0 開始芹敌,為應(yīng)用提供了硬件加速 OpenGL 渲染器痊远,以改善許多常見 2D 圖形運(yùn)算的性能。 啟用硬件加速渲染器時(shí)氏捞,Canvas碧聪、Paint、Xfermode液茎、ColorFilter逞姿、Shader 和 Camera 中的大多數(shù)運(yùn)算都會(huì)得到加速。這可以提高動(dòng)畫捆等、滾動(dòng)的流暢度和總體響應(yīng)速度滞造,即便是并不明確使用框架 OpenGL 庫的應(yīng)用也會(huì)受益。 由于啟用硬件加速會(huì)增加資源消耗楚里,因此您的應(yīng)用將占用更多內(nèi)存断部。
需要注意的是,并非所有 OpenGL 2D 運(yùn)算都會(huì)得到加速班缎。如果您啟用硬件加速渲染器蝴光,請對應(yīng)用進(jìn)行測試,以確保其在利用渲染器時(shí)不會(huì)出錯(cuò)达址。
android:icon
一個(gè)表示 Activity 的圖標(biāo)蔑祟。該圖標(biāo)會(huì)在需要在屏幕上表示 Activity 時(shí)顯示給用戶。 例如沉唠,代表啟動(dòng)任務(wù)的 Activity 的圖標(biāo)顯示在啟動(dòng)器窗口中疆虚。該圖標(biāo)通常附帶標(biāo)簽(請參閱 android:label 屬性)。
必須將該屬性設(shè)置為對包含圖像定義的可繪制資源的引用满葛。 如果未設(shè)置該屬性径簿,則改為使用為應(yīng)用整體指定的圖標(biāo)(請參閱 <application> 元素的 icon 屬性),activity 的該屬性會(huì)覆蓋 application 的該屬性嘀韧。這個(gè) Activity 的圖標(biāo) — 無論設(shè)置于此處還是由 <application> 元素設(shè)置 — 同時(shí)也是 Activity 所有 Intent 過濾器的默認(rèn)圖標(biāo)(請參閱 <intent-filter> 元素的 icon 屬性)篇亭。
android:label
android:label="string resource"
一種可由用戶讀取的 Activity 標(biāo)簽。該標(biāo)簽會(huì)在必須將 Activity 呈現(xiàn)給用戶時(shí)顯示在屏幕上锄贷。 它通常與 Activity 圖標(biāo)一并顯示译蒂。如果未設(shè)置該屬性曼月,則改為使用為應(yīng)用整體設(shè)置的標(biāo)簽(請參閱 <application> 元素的 label 屬性),activity 的該屬性會(huì)覆蓋 application 的該屬性柔昼。
這個(gè) Activity 的標(biāo)簽 — 無論設(shè)置于此處還是由 <application> 元素設(shè)置 — 同時(shí)也是 Activity 所有 Intent 過濾器的默認(rèn)標(biāo)簽(請參閱 <intent-filter> 元素的 label 屬性)哑芹。應(yīng)將該標(biāo)簽設(shè)置為對字符串資源的引用,以便可以像用戶界面中的其他字符串那樣進(jìn)行本地化捕透。不過聪姿,為便于開發(fā)應(yīng)用,也可將其設(shè)置為原始字符串乙嘀。
android:launchMode
android:launchMode=["standard" | "singleTop" | "singleTask" | "singleInstance"]
詳情請看這篇博客咳燕,介紹的非常清楚android深入解析Activity的launchMode啟動(dòng)模式,Intent Flag乒躺,taskAffinity。
android:maxRecents
android:maxRecents="integer"
該標(biāo)識(shí)用來指明概覽屏幕中位于此 Activity 根位置的任務(wù)數(shù)上限低缩。 達(dá)到該條目數(shù)時(shí)嘉冒,系統(tǒng)會(huì)從概覽屏幕中移除最近最少使用的實(shí)例。 有效值為 1-50(低內(nèi)存設(shè)備使用 25)咆繁;0 為無效值讳推。 該值必須是整數(shù),例如 50玩般。默認(rèn)值為 16银觅。
android:multiprocess
android:multiprocess=["true" | "false"]
該標(biāo)識(shí)用來指明是否可以將 Activity 實(shí)例啟動(dòng)到啟動(dòng)該實(shí)例的組件進(jìn)程內(nèi) —“true”表示可以,“false”表示不可以坏为。默認(rèn)值為“false”究驴。
正常情況下,新的 Activity 實(shí)例會(huì)啟動(dòng)到定義它的應(yīng)用進(jìn)程內(nèi)匀伏,因此所有 Activity 實(shí)例都在同一進(jìn)程內(nèi)運(yùn)行洒忧。 不過,如果該標(biāo)志設(shè)置為“true”够颠,Activity 實(shí)例便可在多個(gè)進(jìn)程內(nèi)運(yùn)行熙侍,這樣系統(tǒng)就能在任何使用實(shí)例的地方創(chuàng)建實(shí)例(前提是權(quán)限允許這樣做),但是貌似使用的場景和案例不是很多履磨。
android:name
android:name="string"
該標(biāo)識(shí)應(yīng)該不用介紹了蛉抓,用來指定 Activity 的類的名稱,是 Activity 的子類剃诅。 該屬性值應(yīng)為完全限定類名稱(例如巷送,“com.example.project.DemoActivity”)。不過综苔,為了簡便起見惩系,如果名稱的第一個(gè)字符是句點(diǎn)(例如位岔,“.DemoActivity”),則名稱將追加到 <manifest> 元素中指定的軟件包 com.example.project 名稱之后堡牡。還有一個(gè)需要注意的是抒抬,應(yīng)用一旦發(fā)布,即不應(yīng)更改該名稱(除非您設(shè)置了 android:exported="false")晤柄,也就是說如果您的 Activity 有讓其他應(yīng)用使用到擦剑,那么最好不要修改名字,因?yàn)橛锌赡芷渌麘?yīng)用是通過顯式的方式指定的 Activity 名字芥颈,修改名字可能會(huì)造成其他應(yīng)用無法正常使用甚至崩潰惠勒。
該標(biāo)識(shí)沒有默認(rèn)值。必須指定該名稱爬坑。
android:noHistory
android:noHistory=["true" | "false"]
當(dāng)用戶離開 Activity 并且其在屏幕上不再可見時(shí)纠屋,是否應(yīng)從 Activity 堆棧中將其移除并完成(調(diào)用其 finish() 方法)—“true”表示應(yīng)將其完成,“false”表示不應(yīng)將其完成盾计。 默認(rèn)值為“false”售担。
“true”一值表示 Activity 不會(huì)留下歷史軌跡。 它不會(huì)留在任務(wù)的 Activity 堆棧內(nèi)署辉,因此用戶將無法返回 Activity族铆。 所以有一點(diǎn)需要特別注意的是,在此情況下哭尝,如果從這個(gè)定義了 noHistory 的 Activity 啟動(dòng)另一個(gè) Activity 來獲取它的結(jié)果哥攘,系統(tǒng)永遠(yuǎn)不會(huì)調(diào)用 onActivityResult(),因?yàn)榇藭r(shí)這個(gè) Activity 已經(jīng)關(guān)閉了材鹦。
android:parentActivityName
android:parentActivityName="string"
Activity 邏輯父項(xiàng)的類名稱逝淹。此處的名稱必須與為相應(yīng) <activity> 元素的 android:name 屬性指定的類名稱一致。系統(tǒng)會(huì)讀取該屬性侠姑,以確定當(dāng)用戶按下操作欄中的“向上”按鈕時(shí)應(yīng)該啟動(dòng)哪一個(gè) Activity创橄。 系統(tǒng)還可以利用這些信息通過 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>
關(guān)于向上導(dǎo)航的詳細(xì)信息,可以看看 Providing Up Navigation安吁,關(guān)于用處可以看看:android 特殊用戶通知用法匯總--Notification源碼分析醉蚁。
該屬性為 API16 版本引入。
android:permission
android:permission="string"
具體的可以看看android permission權(quán)限與安全機(jī)制解析(上)和android permission權(quán)限與安全機(jī)制解析(下)鬼店。
android:process
android:process="string"
應(yīng)在其中運(yùn)行 Activity 的進(jìn)程的名稱网棍。正常情況下,應(yīng)用的所有組件都在為應(yīng)用創(chuàng)建的默認(rèn)進(jìn)程名稱內(nèi)運(yùn)行妇智,您無需使用該屬性滥玷。 但在必要時(shí)氏身,您可以使用該屬性替換默認(rèn)進(jìn)程名稱,以便讓應(yīng)用組件散布到多個(gè)進(jìn)程中惑畴。如果為該屬性分配的名稱以冒號(“:”)開頭蛋欣,則會(huì)在需要時(shí)創(chuàng)建應(yīng)用專用的新進(jìn)程,并且 Activity 會(huì)在該進(jìn)程中運(yùn)行如贷。如果進(jìn)程名稱以小寫字符開頭陷虎,Activity 將在該名稱的全局進(jìn)程中運(yùn)行,前提是它擁有相應(yīng)的權(quán)限杠袱。這可以讓不同應(yīng)用中的組件共享一個(gè)進(jìn)程尚猿,從而減少資源占用。
上面提到的 Application 元素的 process 屬性可為所有組件設(shè)置一個(gè)不同的默認(rèn)進(jìn)程名稱楣富。
android:relinquishTaskIdentity
Activity 是否將其任務(wù)標(biāo)識(shí)符交給任務(wù)棧中在其之上的 Activity凿掂。 如果任務(wù)根 Activity 的該屬性設(shè)置為“true”,則任務(wù)會(huì)用其內(nèi)的下一個(gè) Activity 的 Intent 替換基本 Intent纹蝴。 如果下一個(gè) Activity 的該屬性也設(shè)置為“true”缠劝,則該 Activity 會(huì)將基本 Intent 給予其在同一任務(wù)中啟動(dòng)的任何 Activity。 系統(tǒng)繼續(xù)為每個(gè) Activity 執(zhí)行此過程骗灶,直至遇到的某個(gè) Activity 將該屬性設(shè)置為“false”為止。 默認(rèn)值為“false”秉馏。
還有一個(gè)很有意思的功能是耙旦,如果該屬性設(shè)置為“true”,則 Activity 還可利用 ActivityManager.TaskDescription 來更改概覽屏幕中的標(biāo)簽萝究、顏色和圖標(biāo)免都。
android:resizeableActivity
android:resizeableActivity=["true" | "false"]
這個(gè)標(biāo)識(shí)和 <application> 里面的作用一樣,如果在 activity 里面定義的話則代表這個(gè) activity 是否支持分屏模式帆竹。如果您將該屬性設(shè)置為 true绕娘,則用戶可以分屏和自由形狀模式啟動(dòng) Activity。 如果您將該屬性設(shè)置為 false栽连,Activity 將不支持多窗口模式险领。 如果該值為 false,且用戶嘗試在多窗口模式下啟動(dòng) Activity秒紧,該 Activity 將全屏顯示绢陌。
該屬性是在 API 級別 24 添加的,如果您的應(yīng)用面向 API 級別 24 或更高級別熔恢,但未對該屬性指定值脐湾,則該屬性的值默認(rèn)設(shè)為 true。
android:screenOrientation
android:screenOrientation=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
"sensorLandscape" | "sensorPortrait" |
"userLandscape" | "userPortrait" |
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
Activity 在設(shè)備上的顯示方向叙淌。如果 Activity 是在多窗口模式下運(yùn)行秤掌,系統(tǒng)會(huì)忽略該屬性愁铺。它的取值可以是如下:
Value | Description |
---|---|
“unspecified” | 默認(rèn)值。由系統(tǒng)選擇方向闻鉴。在不同設(shè)備上茵乱,系統(tǒng)使用的政策以及基于政策在特定上下文所做的選擇可能有所差異。 |
“behind” | 與 Activity 棧中緊接著它的 Activity 的方向相同椒拗。 |
“l(fā)andscape” | 橫向方向(顯示的寬度大于高度)似将。 |
“portrait” | 縱向方向(顯示的高度大于寬度)。 |
“reverseLandscape” | 與正常橫向方向相反的橫向方向蚀苛。API 級別 9 中的新增配置在验。 |
“reversePortrait” | 與正常縱向方向相反的縱向方向堵未。API 級別 9 中的新增配置腋舌。 |
“sensorLandscape” | 橫向方向,但根據(jù)設(shè)備傳感器渗蟹,可以是正晨榻龋或反向的橫向方向。API 級別 9 中的新增配置雌芽。 |
“sensorPortrait” | 縱向方向授艰,但根據(jù)設(shè)備傳感器,可以是正呈缆洌或反向的縱向方向淮腾。API 級別 9 中的新增配置。 |
“userLandscape” | 橫向方向屉佳,但根據(jù)設(shè)備傳感器和用戶的傳感器首選項(xiàng)谷朝,可以是正常或反向的橫向方向武花。 如果用戶鎖定了基于傳感器的旋轉(zhuǎn)圆凰,其行為與 landscape 相同,否則体箕,其行為與 sensorLandscape 相同专钉。API 級別 18 中的新增配置。 |
“userPortrait” | 縱向方向累铅,但根據(jù)設(shè)備傳感器和用戶的傳感器首選項(xiàng)驶沼,可以是正常或反向的縱向方向争群。 如果用戶鎖定了基于傳感器的旋轉(zhuǎn)回怜,其行為與 portrait 相同,否則,其行為與 sensorPortrait 相同玉雾。API 級別 18 中的新增配置翔试。 |
“sensor” | 方向由設(shè)備方向傳感器決定。顯示方向取決于用戶如何手持設(shè)備复旬,它會(huì)在用戶旋轉(zhuǎn)設(shè)備時(shí)發(fā)生變化垦缅。 但一些設(shè)備默認(rèn)情況下不會(huì)旋轉(zhuǎn)到所有四種可能的方向。要允許全部四種方向驹碍,請使用 "fullSensor"壁涎。 |
“fullSensor” | 方向由 4 種方向中任一方向的設(shè)備方向傳感器決定。這與 "sensor" 類似志秃,不同的是它允許所有 4 種可能的屏幕方向怔球,無論設(shè)備正常情況下采用什么方向(例如,一些設(shè)備正常情況下不使用反向縱向或反向橫向浮还,但它支持這些方向)竟坛。 API 級別 9 中的新增配置。 |
“nosensor” | 決定方向時(shí)不考慮物理方向傳感器钧舌。傳感器會(huì)被忽略担汤,因此顯示不會(huì)隨用戶對設(shè)備的移動(dòng)而旋轉(zhuǎn)。 除了這個(gè)區(qū)別洼冻,系統(tǒng)在選擇方向時(shí)使用的政策與“unspecified”設(shè)置相同崭歧。 |
“user” | 用戶當(dāng)前的首選方向。 |
"fullUser" | 如果用戶鎖定了基于傳感器的旋轉(zhuǎn)撞牢,其行為與 user 相同驾荣,否則,其行為與 fullSensor 相同普泡,允許所有 4 種可能的屏幕方向。 API 級別 18 中的新增配置审编。 |
“l(fā)ocked” | 將方向鎖定在其當(dāng)前的任意旋轉(zhuǎn)方向撼班。API 級別 18 中的新增配置。 |
注:如果您聲明其中一個(gè)橫向或縱向值垒酬,系統(tǒng)將其視為對 Activity 運(yùn)行方向的硬性要求砰嘁。 因此,您聲明的值支持通過 Google Play 之類的服務(wù)進(jìn)行過濾勘究,這樣就能將您的應(yīng)用只提供給支持 Activity 所要求方向的設(shè)備矮湘。 例如,如果您聲明了 "landscape"口糕、"reverseLandscape" 或 "sensorLandscape"缅阳,則您的應(yīng)用將只提供給支持橫向方向的設(shè)備。 不過景描,您還應(yīng)通過 <uses-feature> 元素明確聲明十办,您的應(yīng)用要求采用縱向或橫向方向秀撇。 例如,<uses-feature android:name="android.hardware.screen.portrait"/>向族。這純粹是 Google Play(以及其他支持它的服務(wù))提供的一種過濾行為呵燕,平臺(tái)本身并不能控制當(dāng)設(shè)備僅支持特定方向時(shí)您的應(yīng)用能否安裝。
android:stateNotNeeded
android:stateNotNeeded=["true" | "false"]
該標(biāo)識(shí)用來指明能否在不保存 Activity 狀態(tài)的情況下將其終止并成功重新啟動(dòng) —“true”表示可在不考慮其之前狀態(tài)的情況下重新啟動(dòng)件相,“false”表示需要之前狀態(tài)再扭,默認(rèn)值為“false”。一般情況下夜矗,為保存資源而暫時(shí)關(guān)閉 Activity 前泛范,系統(tǒng)會(huì)調(diào)用 onSaveInstanceState() 方法,該方法將 Activity 的當(dāng)前狀態(tài)存儲(chǔ)在一個(gè) Bundle 對象中侯养,然后在 Activity 重新啟動(dòng)時(shí)將其傳遞給 onCreate() 敦跌。如果該屬性設(shè)置為 true,系統(tǒng)可能不會(huì)調(diào)用 onSaveInstanceState()逛揩,并且會(huì)向 onCreate() 傳遞 null 而不是 Bundle柠傍,這樣就與它在 Activity 首次啟動(dòng)時(shí)完全一樣。
這個(gè)標(biāo)識(shí)又一個(gè)特別有用的地方是辩稽,true 設(shè)置可確保 Activity 能夠在未保留狀態(tài)時(shí)重新啟動(dòng)惧笛。 例如,顯示主屏幕的 Activity 可以使用該設(shè)置來確保其由于某種原因崩潰時(shí)不會(huì)被移除逞泄。
android:supportsPictureInPicture
android:supportsPictureInPicture=["true" | "false"]
指定 Activity 是否支持畫中畫顯示患整,設(shè)置該屬性的同時(shí),需要將 android:resizeableActivity 標(biāo)識(shí)設(shè)置為 true喷众,要不然系統(tǒng)會(huì)忽略該屬性各谚,可以看到設(shè)置完該屬性之后,android TV 就可以實(shí)現(xiàn)手機(jī)端一個(gè)懸浮 activity 的效果到千,類似于 youtube 昌渤。
所以同樣這個(gè)標(biāo)識(shí)和 android:resizeableActivity 一樣都是 API24 版本添加的。
android:taskAffinity
android:taskAffinity="string"
這個(gè)標(biāo)識(shí)用來指明一個(gè) Activity 的親和性憔四,使用方案可以看看我的博客:android深入解析Activity的launchMode啟動(dòng)模式膀息,Intent Flag,taskAffinity了赵。從概念上講潜支,具有相同親和關(guān)系的 Activity 歸屬同一任務(wù)(從用戶的角度來看,則是歸屬同一“應(yīng)用”)柿汛。 任務(wù)的親和關(guān)系由其根 Activity 的親和關(guān)系確定冗酿。親和關(guān)系確定兩件事 - Activity 更改到的父項(xiàng)任務(wù)(請參閱上面提到的 allowTaskReparenting 屬性)和通過 FLAG_ACTIVITY_NEW_TASK 標(biāo)志啟動(dòng) Activity 時(shí)將用來容納它的任務(wù)。默認(rèn)情況下,應(yīng)用中的所有 Activity 都具有相同的親和關(guān)系已烤。您可以設(shè)置該屬性來以不同方式組合它們鸠窗,甚至可以將在不同應(yīng)用中定義的 Activity 置于同一任務(wù)內(nèi)。 要指定 Activity 與任何任務(wù)均無親和關(guān)系胯究,請將其設(shè)置為空字符串稍计。如果未設(shè)置該屬性,則 Activity 繼承為應(yīng)用設(shè)置的親和關(guān)系(可以參考 <application> 元素的 taskAffinity 屬性)裕循,應(yīng)用默認(rèn)親和關(guān)系的名稱是 <manifest> 元素設(shè)置的 packageName臣嚣。
android:theme
android:theme="resource or theme"
這個(gè)標(biāo)識(shí)用的應(yīng)該很多了,用來定義一個(gè) activity 的樣式剥哑,為一個(gè)資源的引用硅则,它會(huì)自動(dòng)將 Activity 的上下文設(shè)置為使用該主題(請參閱 setTheme()),它還可以引發(fā) Activity 啟動(dòng)前的“啟動(dòng)”動(dòng)畫(以更加符合 Activity 的實(shí)際外觀)株婴。如果未設(shè)置該屬性怎虫,則 Activity 繼承通過 application 元素的 theme 屬性為應(yīng)用整體設(shè)置的主題。 如果該屬性也未設(shè)置困介,則使用默認(rèn)系統(tǒng)主題大审。具體的可以看一下開發(fā)指南:樣式和主題。
關(guān)于 theme 的實(shí)戰(zhàn)可以看看博客:android 自定義狀態(tài)欄和導(dǎo)航欄分析與實(shí)現(xiàn)
android:uiOptions
android:uiOptions=["none" | "splitActionBarWhenNarrow"]
這個(gè)標(biāo)識(shí)主要是用來針對 action bar 的座哩,它有兩個(gè)值:
Value | Description |
---|---|
"none" | 無附加 UI 選項(xiàng)徒扶。這是默認(rèn)值。 |
"splitActionBarWhenNarrow" | 當(dāng)水平空間受限時(shí)(例如在手持設(shè)備上的縱向模式下時(shí))在屏幕底部添加一個(gè)欄以顯示應(yīng)用欄(也稱為操作欄)中的操作項(xiàng))根穷。 應(yīng)用欄不是以少量操作項(xiàng)形式出現(xiàn)在屏幕頂部的應(yīng)用欄中姜骡,而是分成了頂部導(dǎo)航區(qū)和底部操作項(xiàng)欄。 這可以確保操作項(xiàng)以及頂部的導(dǎo)航和標(biāo)題元素都能獲得合理的空間屿良。 菜單項(xiàng)不會(huì)拆分到兩個(gè)欄中圈澈,它們始終一起出現(xiàn)。 |
該標(biāo)識(shí)為 API14 版本增加尘惧,具體的可以查看 action bar 的官方文檔:Adding the App Bar康栈。
android:windowSoftInputMode
android:windowSoftInputMode=["stateUnspecified",
"stateUnchanged", "stateHidden",
"stateAlwaysHidden", "stateVisible",
"stateAlwaysVisible", "adjustUnspecified",
"adjustResize", "adjustPan"]
這個(gè)標(biāo)識(shí)用來設(shè)置 Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式,這個(gè)屬性的設(shè)置影響兩個(gè)方面:<ul><li>當(dāng) Activity 成為用戶注意的焦點(diǎn)時(shí)軟鍵盤的狀態(tài) — 隱藏還是可見褥伴。</li><li>對 Activity 主窗口所做的調(diào)整 — 是否將其尺寸調(diào)小以為軟鍵盤騰出空間,或者當(dāng)窗口部分被軟鍵盤遮擋時(shí)是否平移其內(nèi)容以使當(dāng)前焦點(diǎn)可見漾狼。</li></ul>該設(shè)置必須是下表所列的值之一重慢,或者是一個(gè)“state...”值加上一個(gè)“adjust...”值的組合。 在任一組中設(shè)置多個(gè)值(例如逊躁,多個(gè)“state...”值)都會(huì)產(chǎn)生未定義結(jié)果似踱。各值之間使用垂直條 (|) 分隔。 例如:<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >
,這個(gè)標(biāo)識(shí)可以設(shè)置的值如下:
Value | Description |
---|---|
"stateUnspecified" | 不指定軟鍵盤的狀態(tài)(隱藏還是可見)核芽。 將由系統(tǒng)選擇合適的狀態(tài)囚戚,或依賴主題中的設(shè)置。這是對軟鍵盤行為的默認(rèn)設(shè)置轧简。 |
“stateUnchanged” | 當(dāng) Activity 轉(zhuǎn)至前臺(tái)時(shí)保留軟鍵盤最后所處的任何狀態(tài)驰坊,無論是可見還是隱藏。 |
“stateHidden” | 當(dāng)用戶選擇 Activity 時(shí) — 也就是說哮独,當(dāng)用戶確實(shí)是向前導(dǎo)航到 Activity拳芙,而不是因離開另一 Activity 而返回時(shí) — 隱藏軟鍵盤。 |
“stateAlwaysHidden” | 當(dāng) Activity 的主窗口有輸入焦點(diǎn)時(shí)始終隱藏軟鍵盤皮璧。 |
“stateVisible” | 在正常的適宜情況下(當(dāng)用戶向前導(dǎo)航到 Activity 的主窗口時(shí))顯示軟鍵盤舟扎。 |
“stateAlwaysVisible” | 當(dāng)用戶選擇 Activity 時(shí) — 也就是說,當(dāng)用戶確實(shí)是向前導(dǎo)航到 Activity悴务,而不是因離開另一 Activity 而返回時(shí) — 顯示軟鍵盤睹限。 |
“adjustUnspecified” | 不指定 Activity 的主窗口是否調(diào)整尺寸以為軟鍵盤騰出空間,或者窗口內(nèi)容是否進(jìn)行平移以在屏幕上顯露當(dāng)前焦點(diǎn)讯檐。 系統(tǒng)會(huì)根據(jù)窗口的內(nèi)容是否存在任何可滾動(dòng)其內(nèi)容的布局視圖來自動(dòng)選擇其中一種模式羡疗。 如果存在這樣的視圖,窗口將進(jìn)行尺寸調(diào)整裂垦,前提是可通過滾動(dòng)在較小區(qū)域內(nèi)看到窗口的所有內(nèi)容顺囊。這是對主窗口行為的默認(rèn)設(shè)置。 |
“adjustResize” | 始終調(diào)整 Activity 主窗口的尺寸來為屏幕上的軟鍵盤騰出空間蕉拢。 |
“adjustPan” | 不調(diào)整 Activity 主窗口的尺寸來為軟鍵盤騰出空間特碳, 而是自動(dòng)平移窗口的內(nèi)容,使當(dāng)前焦點(diǎn)永遠(yuǎn)不被鍵盤遮蓋晕换,讓用戶始終都能看到其輸入的內(nèi)容以现。 這通常不如尺寸調(diào)正可取,因?yàn)橛脩艨赡苄枰P(guān)閉軟鍵盤以到達(dá)被遮蓋的窗口部分或與這些部分進(jìn)行交互罪郊。 |
adjustResize 和 adjustPan 的區(qū)別就在于前者是調(diào)整 Activity 的窗口尺寸來達(dá)到適配的目的户誓,而 adjustPan 僅僅只是將窗口平移,界面的一部分就會(huì)被軟鍵盤覆蓋住夷家,就不會(huì)被擠到軟鍵盤之上了蒸其。
引用
http://blog.sina.com.cn/s/blog_48d491300100zmga.html
https://developer.android.com/guide/topics/manifest/application-element.html
https://developer.android.com/guide/topics/manifest/activity-element.html#embedded