2011-07-28 15 views
4

我有設備A和設備B.在運行時選擇的樣式/主題編程

,如果應用程序是在設備A或設備B上運行,我可以很容易地檢測 現在我需要的是使用上設備A和設備B上的其他主題(樣式)。

我該怎麼做?

回答

8

在你的Activity.onCreate()中,你可以調用setTheme()來設置你想要使用的主題。注意,必須在之前完成,然後調用setContentView()或以其他方式創建UI。

請記住,當用戶啓動您的應用程序時,系統會在發生這種情況時顯示預覽。這之前是基於創建一個與您的清單中聲明的​​主題相匹配的窗口。您希望這樣做盡可能匹配您將在onCreate()中設置的主題,以儘可能平滑地轉換到您的應用。

如果您希望自己的主題根據某些設備配置(如平臺版本或屏幕大小)而變化,則可以通過資源完成此操作。只需爲所需的不同配置聲明不同版本的主題即可。文件佈局會是這樣的:

values/ 
    styles.xml # Required default theme 
values-v11/ 
    styles.xml # Theme when running on Android 3.0 or higher 
values-xlarge/ 
    styles.xml # Theme when running on an xlarge screen 

的-v11可以讓你有一個版本,在新平臺上運行時,恢復到舊版本兼容的東西時,使用一個新的主題的主題。例如在values-v11風格中,你的主題的父項可以是新的@android:style/Theme.Holo,而基本的將繼承舊的@android:style/Theme。

而且Android 3.0的爲您提供了一種方法來改變你在運行時主題,通過詢問你的活動被重新啓動時的配置改變發生,如:http://developer.android.com/reference/android/app/Activity.html#recreate()

呼籲在此之後,那被創建活動的新實例可以使用與以前使用的主題不同的值(基於例如保存的實例狀態或共享首選項中的信息)調用setTheme()。

+0

如何設置預覽屏幕大致匹配主題,如果有明暗主題可用?例如,如果您有一個使用黑色作爲windowBackground的主題,並且使用了白色的主題 - 是否有動態樣式化預覽屏幕的方法? –

相關問題