2012-03-02 61 views
3

我有一款平板電腦應用程序,我正在更名,因此有多個主題,基於用戶類型。在Android應用程序中動態查找主題名稱

我想找到當前正在應用的主題的名稱,並基於該主題,然後我可以執行一些後端功能更改。

我必須動態設置一些圖像資源,只要我傳入正確的主題資源(R.style.redtheme),但我想動態設置它。

TypedArray a = getTheme().obtainStyledAttributes(R.style.redtheme, new int[] {aTabResource.mDrawableAttrId}); 

要做樣式我創建自定義屬性,然後在樣式中重寫它們。

如果沒有簡單的方法來獲取主題,我只會保存一個偏好。

回答

7

包管理器可以訪問相當多的元數據。

它可以這樣訪問:

int theme = 0; //0==not set 
try 
{ 
    String packageName = getClass().getPackage().getName(); 
    PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName, PackageManager.GET_META_DATA); 
    theme = packageInfo.applicationInfo.theme; 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

在此之後運行,主題將有風格的資源。

+4

這有點問題,它會得到錯誤的軟件包名稱。如果改變第一行到 '字符串的packageName = mContext.getPackageName()的工作;' 其中'mContext'是活動即 '私人無效createActivity(捆綁savedInstanceState){ 的setContentView(R的情況下。 layout.welcome_layout); mContext = this; ' – 2012-03-08 13:57:58

+3

getClass()。getPackage()不是我們正在尋找的包。應使用mContext.getPackageName() – GetUsername 2013-06-19 05:15:17

+0

getClass()。getPackage()返回應用程序的包。 mContext.getPackageName()返回當前文件對應的包名稱。 – Shellum 2013-06-19 14:33:49