2011-01-11 65 views
36

我試圖得到一個用戶選擇的主題,覺得我很沮喪地接近。定義在AndroidManifest.xml的作品,因爲它應該,但(盡我可以告訴)主題不能改變基於應用程序的首選項:以編程方式切換應用程序範圍的主題?

<application 
    android:theme="@style/theme_sunshine" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"> 

另外,在每個活動動態設置它也適用:

someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight"); 
setTheme(someOtherChosenTheme); 

但這似乎很混亂,我寧願將整個應用程序的主題設置在一個地方。我首先想到的是儘快搶應用程序上下文作爲我的主要活動啓動並做到有:

getApplicationContext().setTheme(R.style.theme_dummy); 

盡我可以告訴,this應該做的伎倆,但實際上它沒有做任何事情 - 在整個應用程序具有默認的Android風格。上述是否有效?如果是的話,我可能會做些別的什麼愚蠢的事情?

如果有問題,我正在API級別3中工作。在正確的方向刺激非常讚賞!

Related question.

回答

30

爲您的應用程序創建基本Activity並覆蓋onCreate以設置主題。從此基本活動中派生所有其他活動。

還要檢查這個教程: http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

+0

這基本上是我在做什麼。它仍然不理想,因爲沒有多重繼承,例如爲自定義ListActivity,但不便之處是輕微的。非常有幫助的教程,即使我已經閱讀它:) – Cheezmeister 2011-01-13 00:46:50

5

有可能是一個很好的解決了這一點,但我無法找到一個,所以我最終作出一個助手類,它需要一個活動一點點靜態輔助方法,基本上執行這兩條線你寫了。當然,這不是完美的,但只需在我的應用程序中爲每個onCreate()方法添加一行代碼就足夠了。

相關問題