有时我们需要在当前的应用中获取到其他应用中的资源,例如有的应用具有换肤功能,可以额外安装皮肤包,这样一来,我们就需要从皮肤包中提取相应的资源文件,获取的方法如下所示:
try {
String remotePackage = "com.xxx.themepackage";
Context remoteContext = createPackageContext(remotePackage, CONTEXT_IGNORE_SECURITY);
Resources remoteResources = remoteContext.getResources();
text.setText(remoteResources.getText(remoteResources.getIdentifier("application_name", "string", remotePackage)));
color.setTextColor(remoteResources.getColor(remoteResources.getIdentifier("delete_target_hover_tint", "color", remotePackage)));
image.setImageDrawable(remoteResources.getDrawable(remoteResources.getIdentifier("ic_launcher_home", "drawable", remotePackage)));
} catch (NameNotFoundException e) {
e.printStackTrace();
}
getIdentifier() 方法中,第一个参数是文件名,第二个参数是资源类型,第三个参数是资源所在包的包名
另外,也可以利用 Resources 的 getAssets() 方法来引用资源包中 assets 目录下的文件,如想要引用 assets 目录下的字体文件来设置字体就可以这样写:
Typeface typeface = Typeface.createFromAsset(remoteResources.getAssets(), "testFont.ttf");
text.setTypeface(typeface);