Android application 和 activity 標(biāo)簽詳解

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 棧啦辐,DownloadManagerMediaPlayer)將會(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_DOCUMENTFLAG_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_DOCUMENTFLAG_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_DOCUMENTFLAG_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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市库快,隨后出現(xiàn)的幾起案子摸袁,更是在濱河造成了極大的恐慌,老刑警劉巖义屏,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靠汁,死亡現(xiàn)場離奇詭異蜂大,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝶怔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門奶浦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踢星,你說我怎么就攤上這事澳叉。” “怎么了斩狱?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵耳高,是天一觀的道長。 經(jīng)常有香客問我所踊,道長泌枪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任秕岛,我火速辦了婚禮碌燕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘继薛。我一直安慰自己修壕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布遏考。 她就那樣靜靜地躺著慈鸠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灌具。 梳的紋絲不亂的頭發(fā)上青团,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音咖楣,去河邊找鬼督笆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛娃肿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播珠十,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼料扰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焙蹭?” 一聲冷哼從身側(cè)響起晒杈,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壳嚎,沒想到半個(gè)月后桐智,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烟馅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年说庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑趁。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刊驴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出寡润,到底是詐尸還是另有隱情捆憎,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布梭纹,位于F島的核電站躲惰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏变抽。R本人自食惡果不足惜础拨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绍载。 院中可真熱鬧诡宗,春花似錦、人聲如沸击儡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阳谍。三九已至蛀柴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間边坤,已是汗流浹背名扛。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留茧痒,地道東北人肮韧。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像旺订,于是被迫代替她去往敵國和親弄企。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容