在Android应用程序中动态查找主题名称

Car*_*all 4 android android-theme

我有一个平板电脑应用程序,我正在进行品牌重塑,因此有多个主题,基于用户的类型.

我想找到当前正在应用的主题的名称,然后基于该主题,我可以进行一些后端功能更改.

我必须动态设置一些图像资源,只要我传入正确的主题资源(R.style.redtheme)就可以了,但我想动态设置它.

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

为了做样式我正在创建自定义属性,然后在样式中覆盖它们.

如果没有简单的方法来获得主题,我将保存一个偏好.

She*_*lum 9

包管理器可以访问相当多的元数据.

它可以像这样访问:

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();
}
Run Code Online (Sandbox Code Playgroud)

运行后,主题将具有样式资源.

  • 有一点问题,它得到错误的包名称.如果你将第一行更改为`String packageName = mContext.getPackageName();`,其中`mContext`是Activity的上下文,即`private void createActivity(Bundle savedInstanceState){setContentView(R.layout.welcome_layout); mContext = this; ` (4认同)
  • getClass().getPackage()不是我们正在寻找的包.应该使用mContext.getPackageName() (3认同)