android:allowTaskReparenting=[「true」 | 「false」]
代表了這個應用在 reset task 時,它的全部 activity 是否能夠從打開它們的 task 棧中遷移到它們聲明的 taskAffinity 親和性(taskAffinity 屬性能夠查看個人這篇博客:android深刻解析Activity的launchMode啓動模式,Intent Flag,taskAffinity)棧中,true 表明能夠,false 表明不能夠。Android 源碼中,咱們從 Home 界面啓動程序時都帶了 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,因此從 Home 界面啓動程序就會進行 reset task,也就會使用到 allowTaskReparenting 這個屬性。
通常來講,當 Activity 啓動後,它就與啓動它的 Task 關聯,而且在那裏消耗它的整個生命週期,噹噹前的 Task 再也不顯示時,你可使用這個特性來強制 Activity 移動到有着 affinity 的 Task 中。例如在一封 email 郵件中包含一個 web 頁面的連接,點擊它就會啓動一個 Browser Activity 來顯示這個頁面,這個 Activity 時由 Browser 應用程序定義的,可是如今它做 email Task 的一部分,將它的 allowTaskReparenting 設置爲 true,若是 Browser 下一次進入前臺時,它就會根據 taskAffinity 屬性從新宿主到 Browser Task 棧中,它就能被看見,而且當 email Task 再次進入前臺時,就看不到它了。html
android:allowBackup=[「true」 | 「false」]
這個標識用來表示是否容許應用備份相關的數據而且在必要時候恢復還原這些數據,若是該標識設爲 false,則表明不備份和恢復任何的應用數據,默認的該標識屬性爲 true。當 allowBackup 標識設置爲 true 時,用戶便可以經過 adb backup 和 adb restore 來進行對應數據的備份和恢復,這個在不少時候會帶來必定的安全風險。
adb backup 命令允許任何一個打開 USB 調試開關的人從 Android 手機中複製應用數據到外設,一旦應用數據被備份以後,全部應用數據均可被用戶讀取;adb restore 命令容許用戶指定一個恢復的數據來源(即備份的應用數據)來恢復應用程序數據的建立。所以,當一個應用數據被備份以後,用戶便可在其餘Android手機或模擬器上安裝同一個應用,以及經過恢復該備份的應用數據到該設備上,在該設備上打開該應用便可恢復到被備份的應用程序的狀態。尤爲是通信錄應用,一旦應用程序支持備份和恢復功能,攻擊者便可經過adb backup和adb restore進行恢復新安裝的同一個應用來查看聊天記錄等信息;對於支付金融類應用,攻擊者可經過此來進行惡意支付、盜取存款等;所以爲了安全起見,開發者務必將allowBackup標誌值設置爲false來關閉應用程序的備份和恢復功能,以避免形成信息泄露和財產損失。
網上也能夠看到不少將 allowBackup 設置爲 true 帶來的許多風險,能夠看看這篇博客:詳解Android App AllowBackup配置帶來的風險。java
android:backupAgent=」string」
android:backupAgent 這個標識是用來設置備份代理,對於大部分應用程序來講,都或多或少保存着一些持久性的數據,好比數據庫和共享文件或者有本身的配置信息,爲了保證這些數據和配置信息的安全性以及完整性,Android提供了這樣一個機制,咱們能夠經過這個備份機制來保存配置信息和數據以便爲應用程序提供恢復點。若是用戶將設備恢復出廠設置或者轉換到一個新的Android設備上,系統就會在應用程序從新安裝時自動恢復備份數據。這樣,用戶就不須要從新產生它們之前的數據或者設置了。這個進程對於用戶是徹底透明的,而且不影響其自身的功能或者應用程序的用戶體驗。要實現備份代理,就必須作兩件事,一是實現 BackupAgent 或者 BackupAgentHelper 的子類,二是在 Manifest 文件內用 android:backupAgent 屬性聲明備份代理。android
android:backupInForeground=[「true」 | 「false」]
這個標識用來代表Auto Backup for Apps功能是否能夠在應用在前臺的時候進行數據的備份。Auto Backup for Apps功能是 Android 6.0 引入的一個新功能,它容許一個應用將本身的備份數據保存到 Google Drive 上面,每一個用戶能夠免費保存 25M 的應用數據,這個新功能須要配合 android:allowBackup 一塊兒使用。
這個標識的默認值爲 false ,這意味着系統不會備份一個應用的數據,若是這個應用運行在前臺(好比一個音樂軟件的後臺播放 service 是經過 startForeground 打開的)。git
android:banner=」drawable resource」
這個標識是用在 Android TV 電視上用輪播圖來表明一個應用,因爲輪播圖只是在 HOME 界面上顯示的,因此它僅僅只能被一個帶有可以處理 CATEGORY_LEANBACK_LAUNCHER intent Activity 的應用聲明。因爲這個標識是 Android TV 開發使用到的,在這裏就不詳細介紹了,具體的能夠看 Google 的 API 文檔。github
android:debuggable=[「true」 | 「false」]
這個標識用來代表該應用是否能夠被調試,默認值爲 false.web
android:description=」string resource」
用來聲明關於這個應用的詳細說明,用戶可讀的,必須使用 @string 的樣式來聲明,這個聲明要比 label 標籤聲明的文字更加詳細,並且和 label 不同,這個標識不可以使用 raw string。數據庫
這個標識用來代表系統可否實例化這個應用的組件,true 表明能夠,false 表明不能夠,若是此值設爲 true,則由每一個組件的 enabled 屬性肯定自身的啓用或禁用,若是此值設爲 false ,則覆蓋組件的設置值,全部組件都將被禁用。該標識的默認值是 true 。windows
android:extractNativeLibs=[「true」 | 「false」]
這個標識爲 android 6.0 引入,該屬性若是設置爲 false,則系統在安裝應用的時候不會把 so 文件從 apk 中解壓出來了,同時修改 System.loadLibrary 直接打開調用 apk 中的 so 文件。可是,目前要讓該技巧生效還須要額外2個條件:一個是apk 中的 .so 文件不能被壓縮;二個是 .so 必須用 zipalign -p 4 來對齊。該標識的默認值爲 true。瀏覽器
android:fullBackupContent=」string」
這個標識用來指明備份的數據的規則,該標識固然是配合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 屬性指定了一個 XML 文件。該文件名爲mybackupscheme.xml,位於應用開發項目的 res/xml/ 目錄中。 此配置文件包括關於要備份哪些文件的規則。 下列示例代碼顯示了將某一特定文件排除在備份以外的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="database" path="device_info.db"/>
</full-backup-con複製代碼
此示例備份配置僅將一個特定數據庫文件排除在備份以外,全部其餘文件均予以備份。
android:fullBackupOnly=[「true」 | 「false」]
這個標識用來指明當Auto Backup for Apps功能可使用的時候是否開啓它。若是該標識設置爲 true,在 Android 6.0 以及之上的手機上,應用將會執行Auto Backup for Apps功能,在以前的 Android 版本中,你的應用將會自動忽略該標識,而且切換成 Key/Value Backups。
android:hasCode=[「true」 | 「false」]
該標識用來指明應用程序是否包含代碼,「true」表示包含,「false」表示不包含。 若是此值設爲「false」,則在啓動組件時系統不會試圖裝載任何程序代碼。 默認值是「true」。
應用程序不包含任何自有代碼的狀況極少發生。 僅當只用到了內置的組件類時纔有可能,好比使用了AliasActivity 類的 Activity。
android:hardwareAccelerated=[「true」 | 「false」]
是否爲應用程序中全部的 Activity 和 View 啓用硬件加速渲染功能 —「true」表示開啓,「false」表示關閉。 若是 minSdkVersion 或 targetSdkVersion 的值大於等於「14」,則本屬性默認值是「true」,不然,默認值爲「false」。
自 Android 3.0 (API 級別 11)開始,應用程序可使用硬件加速的 OpenGL 渲染功能來提升不少經常使用 2D 圖形操做的性能。 當開啓硬件加速渲染功能時,大部分 Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的操做都會被加速。 即使應用程序沒有顯式地調用系統的 OpenGL 庫,這仍能使動畫更加平滑、屏幕滾動也更加流暢、總體響應速度得到改善。
請注意,並不是全部的 OpenGL 2D 操做都會被加速。 若是開啓了硬件加速渲染功能,請對應用程序進行測試以確保使用渲染時不會出錯。更多詳細的操做能夠去查看 google 文檔硬件加速指南。
android:icon=」drawable resource」
表明整個應用程序的圖標,也即應用程序中每一個組件的默認圖標。 請參閱 < activity >、 < activity-alias >、 < service >、 < receiver > 和< provider > 元素各自的icon屬性。本屬性必須設爲對 drawable 資源的引用(例如「 @drawable/icon 」)。 圖標沒有默認值。
必需要注意到的是這個標識和下面要介紹到的 android:logo
標籤不同,這個標籤是在桌面顯示的圖標,然後者是在 actionBar 或者 toolBar 上面顯示的。
android:isGame=[「true」 | 「false」]
這個標識用來指明該應用是不是遊戲,這樣就可以將該應用和其餘應用分離開來,默認的改值爲 false。
android:killAfterRestore=[「true」 | 「false」]
這個標識用來指明在手機恢復出廠設置以後,該應用的全部設置信息都被重置時,該應用是否須要被殺死,單個應用的重置設置操做通常不會形成應用的關閉,整個系統的重置操做通常只會發生一次,那就是手機第一次進入系統時的初始化設置,第三方應用通常狀況下不須要用到該標識,
默認該值爲 true,這代表系統重置設置以後,應用程序將在處理數據完成後被關閉。
android:largeHeap=[「true」 | 「false」]
這個標識用來代表這個應用的進程是否須要更大的運行內存空間,這個標識對該應用的全部進程都有效,可是須要注意的一點是,這僅僅對第一個加載進這個進程的應用起做用,若是用戶經過 sharedUserId 將多個應用置於同一個進程(SharedUserId 的具體用法能夠參考個人博客:android IPC通訊(上)-sharedUserId&&Messenger),那麼兩個應用都必需要指定該標識而且設置爲同一個值,要否則就會產生意想不到的結果。
大部分應用程序不須要用到本屬性,而是應該關注如何減小內存消耗以提升性能。 使用本屬性並不能確保必定會增長可用的內存,由於某些設備可用的內存原本就頗有限。
要在運行時查詢可用的內存大小,請使用 getMemoryClass() 或getLargeMemoryClass() 方法,後者的方法能夠獲取到應用開啓 largeHeap 以後能夠得到的內存大小。
這裏說到一點是,一個應用不該該經過這個屬性來解決 OOM 問題,而是應該經過檢測內存泄漏來完全根治 OOM,並且當內存很大的時候,每次gc的時間也會長一些,性能也會隨之降低。
android:label=」string resource」
這個標籤應該是很經常使用的一個標籤,它供用戶閱讀的表明整個應用程序的文本標籤,也即應用程序中每一個組件的默認標籤。 請參閱 < activity >、 < activity-alias >、 < service >、 < receiver > 和< provider > 元素各自的 label 屬性。
文本標籤應設爲一個字符串資源的引用,這樣就能像其它用戶界面內的字符串同樣對其進行本地化。 不過,考慮到開發時的便利性,也能夠將其直接設爲字符串。
android:logo=」drawable resource」
這個標識指定了整個應用程序的 logo 標識,也即各 Activity 的默認 logo。
本屬性必須設爲對 drawable 資源的引用,該資源中包含了圖片文件(例如「@drawable/logo」)。 logo 沒有默認值。上面也介紹到了和 android:icon
的區別,這個是在 actionBar 或者 toolBar 上面展現的,icon 屬性是在桌面顯示的。
android:manageSpaceActivity=」string」
這個標識用來指定一個 Activity 的名字,當用戶在設置頁面中手動點擊清除數據按鈕時,不會像之前同樣把應用的私有目錄/data/data/包名下的數據徹底清除,而是跳轉到那個聲明的 activity 中,讓用戶遵守 activity 中提供的功能清除指定的數據。
感興趣的能夠看看該連接:android:manageSpaceActivity讓應用手動管理應用的數據目錄
android:name=」string」
該標識用來指定該應用程序 Application 子類的徹底限定名稱,該類將優先於全部程序組件被實例化,該子類是可選的,根據應用程序的實際需求看是否使用,可是大多數應用程序都有使用,若是沒有提供該 Application 子類時,Android 將使用 Application 類的實例。
android:permission=」string」
該標識用來指定客戶端要與應用程序交互而必須擁有的權限名稱,本屬性爲一次設置適用於所有程序組件的權限提供了一個便捷途徑,它能夠被組件各自的 permission 屬性覆蓋,這個就至關於把 permission 標籤設置給了應用裏面的每一個 Activity,Service 等等四大組件,詳細的能夠查看 google 文檔的權限或者另外一篇文檔安全與權限。
或者能夠看看這篇對於 permission 的博客:android permission權限與安全機制解析(上)。
android:permission=」string」
該標識用來指明一個應用程序是否須要一直保持運行狀態,true 表明是,false 表明否,默認值是 false。通常的第三方應用是不該該設置該標識的,持久運行模式適用於某些特定的系統應用,好比通話,短信等應用,並且該應用在異常崩潰出現後,雖然這種狀況很稀少,會當即重啓,因此該標識第三方應用設置以後是很差用的。
這個標識的詳細剖析能夠看看這個博客:android persistent屬性研究。
android:process=」string」
應用程序的所有組件都將運行於其中的進程名稱。 每一個組件經過設置各自的 process 屬性,能夠覆蓋本缺省值。
默認狀況下,當運行應用程序的第一個組件時,Android 會爲程序建立一個進程。 而後全部組件都會運行在這個進程中。 默認進程的名稱與應用程序裏面設置的 package 包名一致。
經過將本屬性設置爲其餘應用程序的進程名稱,可讓兩個應用程序的組件運行於同一個進程中 — 但只有這兩個應用程序使用 sharedUserId 指定爲同一個 userId 並用要用同一個證書籤名時才行。
若是賦予本屬性的名稱是以冒號(’:’)開頭的,則必要時將會爲應用程序建立一個新的私有進程。 若是進程名稱以小寫字母開頭,則將建立以此名稱命名的全局進程。 全局進程能夠被其餘應用程序共享,以減小資源的佔用。
android:restoreAnyVersion=[「true」 | 「false」]
該標識用來指明一個應用程序能夠經過任何版本的備份數據進行數據恢復,就算該備份數據是從當前安裝版本的更新版本應用備份出來的,把這個標識設置爲 true 以後,Backup Manager 將會從一個不匹配版本的備份數據進行數據恢復操做,即便發生版本衝突也即數據版本不兼容時也是如此。 使用本屬性時必定要特別當心。該標識的默認值爲 false。
android:requiredAccountType=」string」
該標識爲 API18 版本添加,設定應用程序所需的帳戶類型。 若是應用程序須要一個 Account 才能運行,本屬性值必須與帳戶的認證類型(由 AuthenticatorDescription 定義)吻合,好比「com.google」。默認值是 null,表示應用程序不須要任何帳戶就能夠運行。由於目前的受限用戶配置功能(Restricted Profile)沒法添加帳戶,設定本屬性的應用程序對於受限用戶而言是不可用的, 除非你同時將 android:restrictedAccountType 也聲明爲相同的值。
提醒:若是帳戶數據可能會泄露我的身份信息,聲明本屬性就很重要了,而且要把 android:restrictedAccountType 設置爲 null ,這樣受限用戶就沒法用你的應用程序來訪問機主的我的信息了。
android:restrictedAccountType=」string」
該標識和 android:requiredAccountType 同樣也是 API18 添加,可是和 android:requiredAccountType 不同的是該屬性若是設置了後,將會容許受限用戶訪問機主的該帳戶,若是應用程序須要使用 Account 而且容許受限用戶訪問主帳戶,本屬性值必須與應用程序的帳戶認證類型(由 AuthenticatorDescription 定義)吻合,好比「com.google」。默認值爲 null ,表示應用程序不須要 任何帳戶就能夠運行。
提醒:設置本屬性將容許受限用戶經過主帳戶使用你的應用程序,這可能會泄露我的身份信息。 若是帳戶可能會泄露我的信息,請勿使用本屬性,而是使用 android:requiredAccountType 屬性,以禁止受限用戶的使用。
android:resizeableActivity=[「true」 | 「false」]
這個標識用來代表應用是否支持分屏操做,這個標識能夠設置在 < activity > 或者 標籤上。若是把這個屬性設置爲 true,用戶就能把這個應用或者 activity 設置爲分屏或者自由模式,若是這個標識設置爲 false,該應用或者 activity 將不支持多窗口的分屏模式,若是用戶試圖使用分屏模式打開該 activity,這個應用也只會充滿整個屏幕。
若是你應用的 targetAPI 是 24 版本或者更高,雖然你沒有顯示的聲明該標識的值,這個標識的默認值爲 true。這個標識是在 API24 版本添加。
android:supportsRtl=[「true」 | 「false」]
這個標識是用來聲明應用是否要支持從右到左的(RTL)佈局方式。
若是本標識屬性設置爲 true 而且同時 targetSdkVersion 爲 17 或者以上版本,則系統將會激活並使用各類 RTL API ,應用程序就能夠顯示 RTL Layout。 若是本屬性設爲 false 或者 targetSdkVersion 爲 16 如下版本,則 RTL API 將會被忽略或失效,應用程序將忽略與 Layout 方向有關的用戶本地化選項(Layout 都將從左到右佈局)。本屬性的默認值是 false,爲 API17 版本添加。
android:taskAffinity=」string」
該標識將會對應用的全部 activity 生效,除非該 activity 設置了本身單獨的 taskAffinity 。通常狀況下,在沒有顯示設置該標識的狀況下,應用的全部 activity 都有同一個 affinity ,該 affinity 名字默認爲 package 的名字。
關於 taskAffinity 和 launchMode 的詳細介紹和用法能夠看看個人這篇博客:android深刻解析Activity的launchMode啓動模式,Intent Flag,taskAffinity。
android:testOnly=[「true」 | 「false」]
該標識用來指明這個應用是否是僅僅做爲測試的用途,好比,本應用程序可能會暴露一些不屬於本身的功能或數據,這將引起安全漏洞,但對測試而言這又很是有用,並且這種應用程序只能經過 adb 進行安裝。
android:theme=」resource or theme」
這個標識用來聲明這個應用的全部 activity 的主題,單獨的一個 activity 能夠聲明本身的 theme 主題來覆蓋默認的屬性,具體的能夠查看 google 的官方文檔:樣式和主題。
android:uiOptions=[「none」 | 「splitActionBarWhenNarrow」]
這個標識用來指定這個應用全部的 Activity 的 UI 附加選項,它有兩個值:
Value | Description |
---|---|
"none" | 沒有其餘的 UI 選項,改值爲這個標識的默認值 |
"splitActionBarWhenNarrow" | 當水平空間受限時(例如在手持設備上的縱向模式下時)在屏幕底部添加一個欄以顯示應用欄(也稱爲操做欄)中的操做項。 應用欄不是以少許操做項形式出如今屏幕頂部的應用欄中,而是分紅了頂部導航區和底部操做項欄。 這能夠確保操做項以及頂部的導航和標題元素都能得到合理的空間。 菜單項不會拆分到兩個欄中,它們始終一塊兒出現。 |
這個標識在 API14 版本添加,通常狀況下不多會用到這個標識,我曾經只在魅族手機的適配過程當中用到了這個標識,想要了解詳細的適配,能夠去看看 google 官方的官方教程添加應用欄。
android:usesCleartextTraffic=[「true」 | 「false」]
這個標識爲 API23 版本也就是 Android M 添加,它用來指明應用是否須要使用明文的網絡鏈接,例如明文的 HTTP 鏈接,這個標識的默認值爲 true。
當這個標識設置爲 false 的時候,平臺的組件(例如,HTTP 和 FTP 棧,DownloadManager,MediaPlayer)將會拒絕應用使用明文的請求。第三方的庫強烈建議也遵照這個設置,避免使用明文請求鏈接的核心緣由是會缺乏機密性,可靠性,並且能夠保護請求不受到惡意的篡改:一個網絡攻擊者可能會監聽網絡傳輸的數據,並且可以在不被檢測的狀況下修改這些數據。
固然這個標識也只是在最理想的狀況下去遵照的,由於考慮到 Android 應用被提供的使用等級,是不可能避免他們全部的明文請求。例如,Socket API 就不必定須要遵照這個標識,由於它也不能決定這個連接是否是明文。然而,多數的應用網絡請求鏈接都被高層次的網絡棧/組件所處理,而這些棧/組件能夠經過讀取 ApplicationInfo.flags 或者 NetworkSecurityPolicy.isCleartextTrafficPermitted()來遵照這個標識。
須要注意的是 WebView 不須要遵照這個標識。在 app 的開發過程當中,也可使用 StrictMode 來檢測明文的請求鏈接,使用方式爲 StrictMode.VmPolicy.Builder.detectCleartextNetwork().
當usesCleartextTraffic被設置爲false,應用程序會在使用HTTP而不是HTTPS時崩潰。
在 API24 也就是 Android 7.0 及以上版本中,若是配置了 Android Network Security ,那麼這個標識將會被自動忽略。
android:vmSafeMode=[「true」 | 「false」]
這個標識用來指明這個應用是否想讓 VM 虛擬機運行在安全模式,默認值爲 false,這個標識是 API8 版本添加,若是設置爲 true 將會禁用 Dalvik just-in-time(JIT)編譯器,這個標識在 API22 版本以後爲新版本作了改進,由於 4.4 以後 Dalvik 虛擬機就被廢棄了,在 22 版本以後這個標識若是設置爲 true 將會禁用 ART ahead-of-time(AOT)編譯器。
詳細的能夠看看這篇介紹:ART、JIT、AOT、Dalvik之間有什麼關係?
android:allowEmbedded=[「true」 | 「false」]
這個標識通常爲開發可穿戴設備時使用,表示該 Activity 可做爲另外一 Activity 的嵌入式子項啓動。 它尤爲適用於子項所在的容器(如 Display)爲另外一 Activity 所擁有的狀況。 例如,用於 Wear 自定義通知的 Activity 必須聲明此項,以便 Wear 在其上下文流中顯示 Activity,後者位於另外一進程中。該屬性的默認值爲 false。
android:allowTaskReparenting=[「true」 | 「false」]
這個標示和 Application 的標識意義同樣,因此若是同時聲明該標識,這個標識會覆蓋 Application 的標識,
android:alwaysRetainTaskState=[「true」 | 「false」]
這個標識用來指示系統是否始終保持 Activity 所在任務的狀態 —「true」表示保持,「false」表示容許系統在特定狀況下將任務重置到其初始狀態。 默認值爲「false」。該屬性只對任務的根 Activity 有意義;對於全部其餘 Activity,均忽略該屬性。
正常狀況下,當用戶從主屏幕從新選擇某個任務時,系統會在特定狀況下清除該任務(從根 Activity 之上的堆棧中移除全部 Activity)。 系統一般會在用戶一段時間(如 30 分鐘)內未訪問任務時執行此操做。
不過,若是該屬性的值是「true」,則不管用戶如何到達任務,將始終返回到最後狀態的任務。 例如,在網絡瀏覽器這類存在大量用戶不肯失去的狀態(如多個打開的標籤)的應用中,該屬性會頗有用。
這個有點抽象,舉個例子,打開客戶端的順序是 SplashActivity –> GuideActivity –> MainActivity(歡迎頁面 –> 功能引導頁面 –> 主頁面),那麼,它在任務棧中就是:
因爲咱們在 Androidmanifest.xml 文件中,給 SplashActivity 設置 android:alwaysRetainTaskState=’true’,當咱們按 HOME 鍵返回桌面,任務棧的狀態被保留着,當咱們點擊應用圖標打開再次應用時,系統會判斷是否已經存在以 SplashActivity 爲根 Activity 的棧,若是有,那麼就直接使用該棧,並顯示棧頂的 Activity。注意,只須要設置根 Activity 就能夠了。
android:autoRemoveFromRecents=[「true」 | 「false」]
這個標識爲 API21 版本添加,由具備該屬性的 Activity 啓動的任務是否一直保留在概覽屏幕中,直至任務中的最後一個 Activity 完成爲止。 若爲 true,則自動從概覽屏幕中移除任務。 它會替換調用方使用的 FLAG_ACTIVITY_RETAIN_IN_RECENTS。 它必須是布爾值「true」或「false」。
android:banner=」drawable resource」
這個和 application 裏面的 banner 標識同樣,也是用在 android TV 上的,在這裏也不詳細介紹了,能夠去看看 google 官方文檔。
android:clearTaskOnLaunch=[「true」 | 「false」]
這個標識用來指明當應用從主屏幕從新啓動時是否都從中移除除根 Activity 以外的全部 Activity,true 表示始終將任務清除到只剩其根 Activity,false 表示不清除,默認值爲 false。須要注意的是該屬性只對啓動新任務的 Activity(根 Activity)有意義;對於任務中的全部其餘 Activity,均忽略該屬性。當值爲「false」時,可在某些狀況下清除任務中的 Activity(參考結合 alwaysRetainTaskState 屬性),但並不是一概能夠。若是該屬性和 allowTaskReparenting 的值均爲「true」,則如上所述,任何能夠更改父項的 Activity 都將轉移到與其有親和關係的任務;其他 Activity 隨即被移除。
例如,假定有人從主屏幕啓動了 Activity P,而後從那裏轉到 Activity Q。該用戶接着按了主屏幕按鈕,而後返回到 Activity P。正常狀況下,用戶將看到 Activity Q,由於那是其最後在 P 的任務中執行的 Activity。 不過,若是 P 將此標誌設置爲「true」,則當用戶按下主屏幕將任務轉入後臺時,其上的全部 Activity(在本例中爲 Q)都會被移除。 所以用戶返回任務時只會看到 P。
android:configChanges=[「mcc」, 「mnc」, 「locale」,
「touchscreen」, 「keyboard」, 「keyboardHidden」,
「navigation」, 「screenLayout」, 「fontScale」,
「uiMode」, 「orientation」, 「screenSize」,
「smallestScreenSize」]
列出 Activity 將自行處理的配置更改。在運行時發生配置更改時,默認狀況下會關閉 Activity 而後將其從新啓動,但使用該屬性聲明配置將阻止 Activity 從新啓動。 Activity 反而會保持運行狀態,而且系統會調用其 onConfigurationChanged() 方法。如下爲該屬性的值,多個值使用「|」分隔 — 例如,「locale|navigation|orientation」:
android:documentLaunchMode
全部這些配置變動均可能影響應用看到的資源值。 所以,調用 onConfigurationChanged() 時,一般有必要再次獲取全部資源(包括視圖佈局、可繪製對象等),以正確處理變化。
咱們日常接觸到最多的就是屏幕的旋轉,屏幕的旋轉若是在沒有特殊設置的狀況下會銷燬當前的 Activity 從新建立一個新的,爲了不建立新的,就能夠在 AndroidMainfest.xml 中對指定 Activity 對應的 配置android:configChanges=」orientation」,這樣,每次旋轉方向時,只有 onConfigurationChanged 方法被調用,沒有了銷燬重建的過程。
android:documentLaunchMode=[「intoExisting」 | 「always」 |
「none」 | 「never」]
指定每次啓動任務時應如何向其中添加新的 Activity 實例。 該屬性容許用戶讓多個來自同一應用的文檔出如今概覽屏幕(recent app)中。該屬性有四個值,會在用戶使用該應用打開文檔時產生如下效果:
Value | Description |
---|---|
「intoExisting」 | Activity 會爲文檔重複使用現有任務。使用該值與不設置 FLAG_ACTIVITY_MULTIPLE_TASK 標誌、但設置 FLAG_ACTIVITY_NEW_DOCUMENT 標誌所產生的效果相同,如使用 Intent 標誌添加任務中所述。 |
「always」 | Activity 爲文檔建立新任務,即使文檔已打開也是如此。 這與同時設置 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標誌的效果相同。 |
「none」 | 該 Activity 不會爲 Activity 建立新任務。這是默認值,它只會在設置了 FLAG_ACTIVITY_NEW_TASK 時建立新任務。 概覽屏幕將按其默認方式對待此 Activity:爲應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。 |
「never」 | 即便 Intent 包含 FLAG_ACTIVITY_NEW_DOCUMENT,該 Activity 也不會啓動到新文檔之中。 設置此值會替代 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標誌的行爲(若是在 Activity 中設置了其中一個標誌),而且概覽屏幕將爲應用顯示單個任務,該任務將從用戶上次調用的任意 Activity 開始繼續執行。 |
注:對於除「none」和「never」之外的值,必須使用 launchMode=」standard」 定義 Activity。 若是未指定此屬性,則使用 documentLaunchMode=」none」。
感興趣的也能夠看看android深刻解析Activity的launchMode啓動模式,Intent Flag,taskAffinity博客中對於FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 標誌的介紹。
android:enabled=[「true」 | 「false」]
該屬性用來標示系統是否可將 Activity 實例化 — 「true」 表示能夠,「false」表示不能夠。 默認值爲「true」。
上面提到了 元素具備本身的 enabled 屬性,該屬性適用於全部應用組件,包括 Activity。 和 屬性必須都是「true」(由於它們都默認使用該值),系統才能將 Activity 實例化。 若是任何一個屬性是「false」,則沒法進行實例化。
android:excludeFromRecents=[「true」 | 「false」]
該標識用來標示是否應將該 Activity 啓動的任務排除在最近使用的應用列表(即概覽屏幕)以外。 也就是說,當該 Activity 是新任務的根 Activity 時,此屬性肯定任務是否應出如今最近使用的應用列表中。 若是應將任務排除在列表以外,請設置「true」;若是應將其包括在內,則設置「false」。 默認值爲「false」。
android:exported=[「true」 | 「false」]
該標識用來指明Activity 是否可由其餘應用的組件啓動 —「true」表示能夠,「false」表示不能夠。若爲「false」,則 Activity 只能由同一應用的組件或使用同一用戶 ID 的不一樣應用啓動。
須要注意的是該默認值取決於 Activity 是否包含 Intent 過濾器。沒有任何過濾器意味着 Activity 只能經過指定其確切的類名稱進行調用。 這意味着 Activity 專供應用內部使用(由於其餘應用不知曉其類名稱)。 所以,在這種狀況下,默認值爲「false」。另外一方面,至少存在一個過濾器意味着 Activity 專供外部使用,所以默認值爲「true」。
該屬性並不是限制 Activity 對其餘應用開放度的惟一手段。 您還能夠利用權限來限制哪些外部實體能夠調用 Activity(請參閱 permission 屬性),具體的也能夠看看android permission權限與安全機制解析(上)和android permission權限與安全機制解析(下)這兩篇博客,詳細描述了權限的相關。
這個標識的使用例子能夠參考android IPC通訊(上)-sharedUserId&&Messenger。
android:finishOnTaskLaunch=[「true」 | 「false」]
該標識用來標示每當用戶再次啓動其任務(在主屏幕上選擇任務)時,是否應關閉(完成)現有 Activity 實例 —「true」表示應關閉,「false」表示不該關閉。 默認值爲「false」。若是該屬性和 allowTaskReparenting 均爲「true」,則優先使用該屬性。 Activity 的親和關係會被忽略。 系統不是更改 Activity 的父項,而是將其銷燬。
android:hardwareAccelerated=[「true」 | 「false」]
該標識用來代表是否應爲此 Activity 啓用硬件加速渲染 —「true」表示應啓用,「false」表示不該啓用,默認值爲「false」。
和 application 的標識不同的是,該標示只針對 Activity。
從 Android 3.0 開始,爲應用提供了硬件加速 OpenGL 渲染器,以改善許多常見 2D 圖形運算的性能。 啓用硬件加速渲染器時,Canvas、Paint、Xfermode、ColorFilter、Shader 和 Camera 中的大多數運算都會獲得加速。這能夠提升動畫、滾動的流暢度和整體響應速度,即使是並不明確使用框架 OpenGL 庫的應用也會受益。 因爲啓用硬件加速會增長資源消耗,所以您的應用將佔用更多內存。
須要注意的是,並不是全部 OpenGL 2D 運算都會獲得加速。若是您啓用硬件加速渲染器,請對應用進行測試,以確保其在利用渲染器時不會出錯。
一個表示 Activity 的圖標。該圖標會在須要在屏幕上表示 Activity 時顯示給用戶。 例如,表明啓動任務的 Activity 的圖標顯示在啓動器窗口中。該圖標一般附帶標籤(請參閱 android:label 屬性)。
必須將該屬性設置爲對包含圖像定義的可繪製資源的引用。 若是未設置該屬性,則改成使用爲應用總體指定的圖標(請參閱 元素的 icon 屬性),activity 的該屬性會覆蓋 application 的該屬性。這個 Activity 的圖標 — 不管設置於此處仍是由 元素設置 — 同時也是 Activity 全部 Intent 過濾器的默認圖標(請參閱 元素的 icon 屬性)。
android:label=」string resource」
一種可由用戶讀取的 Activity 標籤。該標籤會在必須將 Activity 呈現給用戶時顯示在屏幕上。 它一般與 Activity 圖標一併顯示。若是未設置該屬性,則改成使用爲應用總體設置的標籤(請參閱 元素的 label 屬性),activity 的該屬性會覆蓋 application 的該屬性。
這個 Activity 的標籤 — 不管設置於此處仍是由 元素設置 — 同時也是 Activity 全部 Intent 過濾器的默認標籤(請參閱 元素的 label 屬性)。應將該標籤設置爲對字符串資源的引用,以即可以像用戶界面中的其餘字符串那樣進行本地化。不過,爲便於開發應用,也可將其設置爲原始字符串。
android:launchMode=[「standard」 | 「singleTop」 | 「singleTask」 | 「singleInstance」]
詳情請看這篇博客,介紹的很是清楚android深刻解析Activity的launchMode啓動模式,Intent Flag,taskAffinity。
android:maxRecents=」integer」
該標識用來指明概覽屏幕中位於此 Activity 根位置的任務數上限。 達到該條目數時,系統會從概覽屏幕中移除最近最少使用的實例。 有效值爲 1-50(低內存設備使用 25);0 爲無效值。 該值必須是整數,例如 50。默認值爲 16。
android:multiprocess=[「true」 | 「false」]
該標識用來指明是否能夠將 Activity 實例啓動到啓動該實例的組件進程內 —「true」表示能夠,「false」表示不能夠。默認值爲「false」。
正常狀況下,新的 Activity 實例會啓動到定義它的應用進程內,所以全部 Activity 實例都在同一進程內運行。 不過,若是該標誌設置爲「true」,Activity 實例即可在多個進程內運行,這樣系統就能在任何使用實例的地方建立實例(前提是權限容許這樣作),可是貌似使用的場景和案例不是不少。
android:name=」string」
該標識應該不用介紹了,用來指定 Activity 的類的名稱,是 Activity 的子類。 該屬性值應爲徹底限定類名稱(例如,「com.example.project.DemoActivity」)。不過,爲了簡便起見,若是名稱的第一個字符是句點(例如,「.DemoActivity」),則名稱將追加到 元素中指定的軟件包 com.example.project 名稱以後。還有一個須要注意的是,應用一旦發佈,即不該更改該名稱(除非您設置了 android:exported=」false」),也就是說若是您的 Activity 有讓其餘應用使用到,那麼最好不要修更名字,由於有可能其餘應用是經過顯式的方式指定的 Activity 名字,修更名字可能會形成其餘應用沒法正常使用甚至崩潰。
該標識沒有默認值。必須指定該名稱。
android:noHistory=[「true」 | 「false」]
當用戶離開 Activity 而且其在屏幕上再也不可見時,是否應從 Activity 堆棧中將其移除並完成(調用其 finish() 方法)—「true」表示應將其完成,「false」表示不該將其完成。 默認值爲「false」。
「true」一值表示 Activity 不會留下歷史軌跡。 它不會留在任務的 Activity 堆棧內,所以用戶將沒法返回 Activity。 因此有一點須要特別注意的是,在此狀況下,若是從這個定義了 noHistory 的 Activity 啓動另外一個 Activity 來獲取它的結果,系統永遠不會調用 onActivityResult(),由於此時這個 Activity 已經關閉了。
android:parentActivityName=」string」
Activity 邏輯父項的類名稱。此處的名稱必須與爲相應 元素的 android:name 屬性指定的類名稱一致。系統會讀取該屬性,以肯定當用戶按下操做欄中的「向上」按鈕時應該啓動哪個 Activity。 系統還能夠利用這些信息經過 TaskStackBuilder 合成 Activity 的返回棧。
要支持 API 級別 4 - 16,您還可使用爲 「android.support.PARENT_ACTIVITY」 指定值的 元素來聲明父 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>複製代碼
關於向上導航的詳細信息,能夠看看 Providing Up Navigation,關於用處能夠看看:android 特殊用戶通知用法彙總–Notification源碼分析。
該屬性爲 API16 版本引入。
android:permission=」string」
具體的能夠看看android permission權限與安全機制解析(上)和android permission權限與安全機制解析(下)。
android:process=」string」
應在其中運行 Activity 的進程的名稱。正常狀況下,應用的全部組件都在爲應用建立的默認進程名稱內運行,您無需使用該屬性。 但在必要時,您可使用該屬性替換默認進程名稱,以便讓應用組件散佈到多個進程中。若是爲該屬性分配的名稱以冒號(「:」)開頭,則會在須要時建立應用專用的新進程,而且 Activity 會在該進程中運行。若是進程名稱以小寫字符開頭,Activity 將在該名稱的全局進程中運行,前提是它擁有相應的權限。這可讓不一樣應用中的組件共享一個進程,從而減小資源佔用。
上面提到的 Application 元素的 process 屬性可爲全部組件設置一個不一樣的默認進程名稱。
Activity 是否將其任務標識符交給任務棧中在其之上的 Activity。 若是任務根 Activity 的該屬性設置爲「true」,則任務會用其內的下一個 Activity 的 Intent 替換基本 Intent。 若是下一個 Activity 的該屬性也設置爲「true」,則該 Activity 會將基本 Intent 給予其在同一任務中啓動的任何 Activity。 系統繼續爲每一個 Activity 執行此過程,直至遇到的某個 Activity 將該屬性設置爲「false」爲止。 默認值爲「false」。
還有一個頗有意思的功能是,若是該屬性設置爲「true」,則 Activity 還可利用 ActivityManager.TaskDescription 來更改概覽屏幕中的標籤、顏色和圖標。
android:resizeableActivity=[「true」 | 「false」]
這個標識和 裏面的做用同樣,若是在 activity 裏面定義的話則表明這個 activity 是否支持分屏模式。若是您將該屬性設置爲 true,則用戶能夠分屏和自由形狀模式啓動 Activity。 若是您將該屬性設置爲 false,Activity 將不支持多窗口模式。 若是該值爲 false,且用戶嘗試在多窗口模式下啓動 Activity,該 Activity 將全屏顯示。
該屬性是在 API 級別 24 添加的,若是您的應用面向 API 級別 24 或更高級別,但未對該屬性指定值,則該屬性的值默認設爲 true。
android:screenOrientation=[「unspecified」 | 「behind」 |
「landscape」 | 「portrait」 |
「reverseLandscape」 | 「reversePortrait」 |
「sensorLandscape」 | 「sensorPortrait」 |
「userLandscape」 | 「userPortrait」 |
「sensor」 | 「fullSensor」 | 「nosensor」 |
「user」 | 「fullUser」 | 「locked」]
Activity 在設備上的顯示方向。若是 Activity 是在多窗口模式下運行,系統會忽略該屬性。它的取值能夠是以下:
Value | Description |
---|---|
「unspecified」 | 默認值。由系統選擇方向。在不一樣設備上,系統使用的政策以及基於政策在特定上下文所作的選擇可能有所差別。 |
「behind」 | 與 Activity 棧中緊接着它的 Activity 的方向相同。 |
「landscape」 | 橫向方向(顯示的寬度大於高度)。 |
「portrait」 | 縱向方向(顯示的高度大於寬度)。 |
「reverseLandscape」 | 與正常橫向方向相反的橫向方向。API 級別 9 中的新增配置。 |
「reversePortrait」 | 與正常縱向方向相反的縱向方向。API 級別 9 中的新增配置。 |
「sensorLandscape」 | 橫向方向,但根據設備傳感器,能夠是正常或反向的橫向方向。API 級別 9 中的新增配置。 |
「sensorPortrait」 | 縱向方向,但根據設備傳感器,能夠是正常或反向的縱向方向。API 級別 9 中的新增配置。 |
「userLandscape」 | 橫向方向,但根據設備傳感器和用戶的傳感器首選項,能夠是正常或反向的橫向方向。 若是用戶鎖定了基於傳感器的旋轉,其行爲與 landscape 相同,不然,其行爲與 sensorLandscape 相同。API 級別 18 中的新增配置。 |
「userPortrait」 | 縱向方向,但根據設備傳感器和用戶的傳感器首選項,能夠是正常或反向的縱向方向。 若是用戶鎖定了基於傳感器的旋轉,其行爲與 portrait 相同,不然,其行爲與 sensorPortrait 相同。API 級別 18 中的新增配置。 |
「sensor」 | 方向由設備方向傳感器決定。顯示方向取決於用戶如何手持設備,它會在用戶旋轉設備時發生變化。 但一些設備默認狀況下不會旋轉到全部四種可能的方向。要容許所有四種方向,請使用 "fullSensor"。 |
「fullSensor」 | 方向由 4 種方向中任一方向的設備方向傳感器決定。這與 "sensor" 相似,不一樣的是它容許全部 4 種可能的屏幕方向,不管設備正常狀況下采用什麼方向(例如,一些設備正常狀況下不使用反向縱向或反向橫向,但它支持這些方向)。 API 級別 9 中的新增配置。 |
「nosensor」 | 決定方向時不考慮物理方向傳感器。傳感器會被忽略,所以顯示不會隨用戶對設備的移動而旋轉。 除了這個區別,系統在選擇方向時使用的政策與「unspecified」設置相同。 |
「user」 | 用戶當前的首選方向。 |
"fullUser" | 若是用戶鎖定了基於傳感器的旋轉,其行爲與 user 相同,不然,其行爲與 fullSensor 相同,容許全部 4 種可能的屏幕方向。 API 級別 18 中的新增配置。 |
「locked」 | 將方向鎖定在其當前的任意旋轉方向。API 級別 18 中的新增配置。 |
注:若是您聲明其中一個橫向或縱向值,系統將其視爲對 Activity 運行方向的硬性要求。 所以,您聲明的值支持經過 Google Play 之類的服務進行過濾,這樣就能將您的應用只提供給支持 Activity 所要求方向的設備。 例如,若是您聲明瞭 「landscape」、」reverseLandscape」 或 「sensorLandscape」,則您的應用將只提供給支持橫向方向的設備。 不過,您還應經過 元素明確聲明,您的應用要求採用縱向或橫向方向。 例如,。這純粹是 Google Play(以及其餘支持它的服務)提供的一種過濾行爲,平臺自己並不能控制當設備僅支持特定方向時您的應用可否安裝。
android:stateNotNeeded=[「true」 | 「false」]
該標識用來指明可否在不保存 Activity 狀態的狀況下將其終止併成功從新啓動 —「true」表示可在不考慮其以前狀態的狀況下從新啓動,「false」表示須要以前狀態,默認值爲「false」。通常狀況下,爲保存資源而暫時關閉 Activity 前,系統會調用 onSaveInstanceState() 方法,該方法將 Activity 的當前狀態存儲在一個 Bundle 對象中,而後在 Activity 從新啓動時將其傳遞給 onCreate() 。若是該屬性設置爲 true,系統可能不會調用 onSaveInstanceState(),而且會向 onCreate() 傳遞 null 而不是 Bundle,這樣就與它在 Activity 首次啓動時徹底同樣。
這個標識又一個特別有用的地方是,true 設置可確保 Activity 可以在未保留狀態時從新啓動。 例如,顯示主屏幕的 Activity 可使用該設置來確保其因爲某種緣由崩潰時不會被移除。
android:supportsPictureInPicture=[「true」 | 「false」]
指定 Activity 是否支持畫中畫顯示,設置該屬性的同時,須要將 android:resizeableActivity 標識設置爲 true,要否則系統會忽略該屬性,能夠看到設置完該屬性以後,android TV 就能夠實現手機端一個懸浮 activity 的效果,相似於 youtube 。
因此一樣這個標識和 android:resizeableActivity 同樣都是 API24 版本添加的。
android:taskAffinity=」string」
這個標識用來指明一個 Activity 的親和性,使用方案能夠看看個人博客:android深刻解析Activity的launchMode啓動模式,Intent Flag,taskAffinity。從概念上講,具備相同親和關係的 Activity 歸屬同一任務(從用戶的角度來看,則是歸屬同一「應用」)。 任務的親和關係由其根 Activity 的親和關係肯定。親和關係肯定兩件事 - Activity 更改到的父項任務(請參閱上面提到的 allowTaskReparenting 屬性)和經過 FLAG_ACTIVITY_NEW_TASK 標誌啓動 Activity 時將用來容納它的任務。默認狀況下,應用中的全部 Activity 都具備相同的親和關係。您能夠設置該屬性來以不一樣方式組合它們,甚至能夠將在不一樣應用中定義的 Activity 置於同一任務內。 要指定 Activity 與任何任務均無親和關係,請將其設置爲空字符串。若是未設置該屬性,則 Activity 繼承爲應用設置的親和關係(能夠參考 元素的 taskAffinity 屬性),應用默認親和關係的名稱是 元素設置的 packageName。
android:theme=」resource or theme」
這個標識用的應該不少了,用來定義一個 activity 的樣式,爲一個資源的引用,它會自動將 Activity 的上下文設置爲使用該主題(請參閱 setTheme()),它還能夠引起 Activity 啓動前的「啓動」動畫(以更加符合 Activity 的實際外觀)。若是未設置該屬性,則 Activity 繼承經過 application 元素的 theme 屬性爲應用總體設置的主題。 若是該屬性也未設置,則使用默認系統主題。具體的能夠看一下開發指南:樣式和主題。
關於 theme 的實戰能夠看看博客:android 自定義狀態欄和導航欄分析與實現
android:uiOptions=[「none」 | 「splitActionBarWhenNarrow」]
這個標識主要是用來針對 action bar 的,它有兩個值:
Value | Description |
---|---|
"none" | 無附加 UI 選項。這是默認值。 |
"splitActionBarWhenNarrow" | 當水平空間受限時(例如在手持設備上的縱向模式下時)在屏幕底部添加一個欄以顯示應用欄(也稱爲操做欄)中的操做項)。 應用欄不是以少許操做項形式出如今屏幕頂部的應用欄中,而是分紅了頂部導航區和底部操做項欄。 這能夠確保操做項以及頂部的導航和標題元素都能得到合理的空間。 菜單項不會拆分到兩個欄中,它們始終一塊兒出現。 |
該標識爲 API14 版本增長,具體的能夠查看 action bar 的官方文檔:Adding the App Bar。
android:windowSoftInputMode=[「stateUnspecified」,
「stateUnchanged」, 「stateHidden」,
「stateAlwaysHidden」, 「stateVisible」,
「stateAlwaysVisible」, 「adjustUnspecified」,
「adjustResize」, 「adjustPan」]
這個標識用來設置 Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式,這個屬性的設置影響兩個方面:
<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >
,這個標識能夠設置的值以下:
Value | Description |
---|---|
"stateUnspecified" | 不指定軟鍵盤的狀態(隱藏仍是可見)。 將由系統選擇合適的狀態,或依賴主題中的設置。這是對軟鍵盤行爲的默認設置。 |
「stateUnchanged」 | 當 Activity 轉至前臺時保留軟鍵盤最後所處的任何狀態,不管是可見仍是隱藏。 |
「stateHidden」 | 當用戶選擇 Activity 時 — 也就是說,當用戶確實是向前導航到 Activity,而不是因離開另外一 Activity 而返回時 — 隱藏軟鍵盤。 |
「stateAlwaysHidden」 | 當 Activity 的主窗口有輸入焦點時始終隱藏軟鍵盤。 |
「stateVisible」 | 在正常的適宜狀況下(當用戶向前導航到 Activity 的主窗口時)顯示軟鍵盤。 |
「stateAlwaysVisible」 | 當用戶選擇 Activity 時 — 也就是說,當用戶確實是向前導航到 Activity,而不是因離開另外一 Activity 而返回時 — 顯示軟鍵盤。 |
「adjustUnspecified」 | 不指定 Activity 的主窗口是否調整尺寸覺得軟鍵盤騰出空間,或者窗口內容是否進行平移以在屏幕上顯露當前焦點。 系統會根據窗口的內容是否存在任何可滾動其內容的佈局視圖來自動選擇其中一種模式。 若是存在這樣的視圖,窗口將進行尺寸調整,前提是可經過滾動在較小區域內看到窗口的全部內容。這是對主窗口行爲的默認設置。 |
「adjustResize」 | 始終調整 Activity 主窗口的尺寸來爲屏幕上的軟鍵盤騰出空間。 |
「adjustPan」 | 不調整 Activity 主窗口的尺寸來爲軟鍵盤騰出空間, 而是自動平移窗口的內容,使當前焦點永遠不被鍵盤遮蓋,讓用戶始終都能看到其輸入的內容。 這一般不如尺寸調正可取,由於用戶可能須要關閉軟鍵盤以到達被遮蓋的窗口部分或與這些部分進行交互。 |
blog.sina.com.cn/s/blog_48d4…
developer.android.com/guide/topic…
developer.android.com/guide/topic…