android:configChanges
這個屬性列出了那些需要Activity進行自我處理的配置變化。當在運行時配置變化發生的時候,預設情況下,這個Activity會被關掉並重啟,但是用這個屬性聲明一個配置,就會阻止Activity被重啟。相反,這個Activity會保持運行,並且它的onConfigurationChanged()方法會被調用。
注意:應該避免使用這個屬性,並且只把它作為最後的手段來使用。有關如何正確處理配置改變期間的重啟,請閱讀“處理運行是變化”(http://blog.csdn.net/fireofstar/article/details/7456363)
下表中列出了這個屬性的有效值,要設定多個值的時候,用“|”符號串連,例如:“locale|navigation|orientation”
值 |
說明 |
mcc |
IMSI移動國家編碼改變時要進行自我處理---系統發現了一個新的SIM卡,並且更新了MCC。 |
mnc |
IMSI移動網路編碼改變時要進行自我處理---系統發現了一個新的SIM卡,並且更新了MNC |
locale |
語言環境發生變化時要進行自我處理---使用者選擇了一種用於顯示文本的新語言。 |
touchscreen |
觸屏發生變化時要進行自我處理。(這種情況通常不會發生) |
keyboard |
鍵盤類型發生變化時,要進行自我處理。例如使用者插入了一個外部鍵盤 |
keyboardHidden |
鍵盤的可用性發生變化時,要進行自我處理。例如使用者啟用了硬體鍵盤。 |
navigation |
導航類型(軌跡球/方向板)發生變化時,要進行自我處理。這種情況通常不會發生。 |
screenLayout |
螢幕布局發生變化時,要進行自我處理。這可能是由被啟用的不同的顯示方式所導致的變化。 |
fontScale |
字型的縮放因子發生變化時,要進行自我處理。如使用者選擇了一個新的全域字型尺寸。 |
uiMode |
使用者介面發生變化時,要進行自我處理。在把裝置放入案頭/轎車內或夜間模式變化時,會導致這種情況發生。它在API層級8中被引入。 |
orientation |
螢幕的方向發生變化時,要進行自我處理。使用者旋轉裝置時會發生這種變化。 注意:如果應用程式的目標API層級是13或更高的版本,那麼還應該聲明screenSize配置,因為裝置在橫向和縱向之間切換時,對應的尺寸也會發生變化。 |
screenSize |
當前有效螢幕尺寸發生變化時,要進行自我處理。這種變化意味著當前可用的相對長、寬比的尺寸發生了變化,因此當使用者在橫向和縱向之間切換時,就會產生螢幕可用尺寸的變化。但是,如果應用程式是在API層級12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啟Activity,即使是運行在Android3.2或更高版本的裝置上)。 這個設定在API層級13中被引入。 |
smallestScreenSize |
物理尺寸發生變化時,要進行自我處理。這種變化不關注螢幕方向的變化,只在實際的物理螢幕尺寸發生變化時才會發生,如切換到另一個顯示器上的時候。這個變化對應smallestWidth屬性的配置來進行改變。如果應用程式是在API層級12或更低的版本上編譯的,那麼Activity就要始終自己來處理這種變化(這個配置的變化不會重啟Activity,即使是運行在Android3.2或更高版本的裝置上)。 這個設定在API層級13中被引入。 |
所有這些配置的改變都會影響到應用中所能看到的資源值。因此,當onConfigurationChanged()方法被調用時,通常需要重新擷取所有的資源(包括布局資源、可繪製資源等等),以便能夠正確的處理這些改變。
android:enabled
這個屬性用於設定Activity是否能夠被系統執行個體化。如果設定為true,則可以被執行個體化,如果設定為false,則不能被執行個體化。預設值是true。
<application>元素有它自己的enabled屬性,它的這個屬性設定會用於應用程式中的所有組件,包括Activity。<application>和<activity>元素的這個屬性必須要設定為true(預設情況下都是true),以便系統能夠執行個體化Activity。否則Activity不能被執行個體化。
android:excledeFromRecents
這屬性用於設定由該Activity所啟動的任務是否應該被排除在最近使用的應用程式列表之外。也就是說,當這個Activity是一個新任務的根節點時,這個屬性決定了這個任務適應要顯示在使用者最近使用的應用程式列表中。如果設定為true,則這個任務會被排除在列表之外,如何設定為false,則應該包含在最近使用的應用列表中。預設值是false。
android:exported
這個屬性用於設定該Activity能否由另一個應用程式的組件來啟動,如果設定為true,則可以啟動,否則不能啟動。如果設定為false,那麼該Activity只能被同一個應用程式中的組件或帶有相同使用者ID的應用程式來啟動。
它的預設值要依賴與該Activity是否包含了Intent過濾器。如果沒有任何過濾器,則意味著該Activity只能通過明確的類名來調用,這樣就暗示者該Activity只能在應用程式內部使用(因為其他使用者不會知道它的類名),因此在這種情況下,預設值是false。在另一方面,至少存在一個過濾器,則暗示著該Activity可被外部使用,因此預設值是true。
這個屬性不是限制Activity暴露給其他應用程式的唯一方法。還可以使用許可權來限制外部實體對該Activity的調用。
android:finishOnTaskLaunch
這個屬性用於設定既存的Activity執行個體,在使用者再次啟動(在主屏上選擇這個任務)它所屬的任務時,是否應該被關閉。設定為true,則要關閉,否則不關閉,預設值是false。
如果這個屬性和allowTaskReparenting屬性都被設定為true,那麼這個屬性要優於其他屬性,Activity的親緣關係會被忽略。該Activity不會被轉移父任務,而是被銷毀。
android:hardwareAccelerated
這個屬性用於設定該Activity是否應該啟用硬體加速渲染。如果設定為true,則啟用硬體加速,否則不啟用。預設設定是false。
從Android3.0開始,硬體加速的OpenGL渲染器對應用程式可用,以便改善許多共同的2D圖形操作的效能。當硬體加速渲染器被啟用時,在Canva、Paint、Xfermode、ColorFilter、Shader和Camera中大多數操作都會被加速。這樣會使動畫、滾動更平滑,並改善整體的響應效果,即使應用程式沒有明確要使用架構的OpenGL類庫。因為啟用硬體加速會增加系統的資源需求,所以應用程式會佔用更多的記憶體。
要注意的是,不是所有的OpenGL 2D操作都會被加速。如果啟用了硬體加速渲染,就要對應用程式進行充分測試,以確保所使用的渲染沒有錯誤。
android:icon
這屬性定義了代表Activity的一個表徵圖。當Activity被要求顯示到螢幕上時,這個表徵圖會被顯示給使用者。例如,這個表徵圖會顯示在Launcher的視窗中,用於啟動任務。這個表徵圖經常會和label屬性群組合使用。
這個屬性必須被設定為一個包含圖片定義的可繪製資源。如果沒有設定,就會使用給應用程式設定的表徵圖來代替。
Activity的表徵圖(或者是<application>元素設定的表徵圖)也是所有的Activity的Intent過濾器的預設表徵圖。
android:label
這個屬性給Activity設定了一個可讀的標籤。當Activity要展現給使用者的時候,這個標籤會顯示在螢幕上,它經常會跟Activity的表徵圖一起來顯示。
如果這個屬性沒有被設定,就會使用給應用程式設定的標籤來代替。
Activity的標籤(或者是<application>元素設定的標籤)也是所有Activity的Intent過濾器的預設標籤。
這個屬性應該用一個字串資源來設定。以便它能夠在使用者介面中用其他的語言來本地化。但是為了開發應用程式的便利,也可以用原始的字串來設定。