【发布时间】:2017-06-11 20:09:36
【问题描述】:
我知道有一种方法可以通过在 styles.xml 中定义来设置主题并像那样使用它
setTheme(android.R.style.MyTheme);
但是,我想从我开发的另一个应用程序中获取主题。我知道资源名称,实际上我可以使用此代码块获取主题 ID;
Resources res = getPackageManager().getResourcesForApplication("com.example.theme");
int resThemeId = res.getIdentifier("my_theme","style","com.example.theme");
调试时,我看到 resThemeId 不为零。
然后,我需要设置这个主题的最终命令。在 super.onCreate() 函数之前,我尝试实现这个方法,但它似乎不起作用
setTheme(resThemeId);
但不是这个,如果我写下面的语句,我工作得很好
setTheme(android.R.style.Theme_Holo_Light);
那么,我应该怎么做才能使用来自不同包资源的主题?
【问题讨论】:
-
您可以从另一个包中获取资源 ID,但这些资源在您的 APK 中不存在。使用
PackageManager#getResourcesForApplication(String packageName)加载资源应该适用于可绘制对象、字符串、布尔值等。但是,我认为加载另一个 APK 的主题是不可能的,而且绝对不推荐。 -
虽然我可以从其他包资源中获得可绘制对象、字符串、布尔值,但我也希望获得主题。为什么不可能?
-
有可能(见我的回答)。您需要覆盖 getResrouces 以返回其他应用程序的资源,以便您可以应用主题。这也会返回来自其他应用程序的所有字符串、布局、可绘制对象和其他资源,因此不建议这样做。
标签: android resources themes android-package-managers