2012-03-02 63 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