如何从xml中的另一个包加载资源?
Posted
技术标签:
【中文标题】如何从xml中的另一个包加载资源?【英文标题】:How to load resource from another package in xml? 【发布时间】:2013-03-29 15:07:45 【问题描述】:我知道存在这样的代码从另一个包安装资源 xml 文件的能力:
String resourceName = getResources().getResourceEntryName(layoutResID);
String resourceTypeName = getResources().getResourceTypeName(layoutResID);
Resources skinResources = getResourcesForPackage("com.my.skin");
int skinResourceId = skinResources.getIdentifier(resourceName, resourceTypeName, "com.my.skin");
mLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mLayoutInflater.inflate(skinResources.getXml(skinResourceId), null);
super.setContentView(mLayoutInflater.inflate(skinResources.getXml(skinResourceId), null));
但我想知道如何在 xml 和可绘制资源中制作相同的内容:
例如:我有两个应用程序:
应用程序 main 带有包“com.my.main” 和应用程序 skin 与包“com.my.skin”在android中docs解释:
可能是对另一个资源的引用,形式为 "@[+][package:]type:name" 或表单中的主题属性 “?[包:][类型:]名称”。
我试图指定这样的内容:
android:background="@com.my.skin:drawable:background_image"
或者这个:
android:background="?com.my.skin:drawable:background_image"
但它不起作用,我的资源文件没有编译。
谁知道如何使用显式规范加载资源。
【问题讨论】:
【参考方案1】:让你的项目成为一个库项目,你可以在另一个 android 项目中引用它。
图书馆项目
这些项目包含可共享的 Android 源代码和您可以在 Android 项目中引用的资源。当您有想要重用的公共代码时,这很有用。库项目不能安装到设备上,但是,它们会在构建时被拉入 .apk 文件中。
有关更多信息,请查看主题图书馆项目下的链接。
http://developer.android.com/tools/projects/index.html
您的库项目将勾选一个复选框,如项目中所示。
您可以将库项目添加到您的 android 项目中。右键单击您的项目。转到属性。在左侧面板中选择 Android。
【讨论】:
【参考方案2】:根据文档,您忘记在 @ 之后添加 +。最后的可绘制格式有一个错误输入:应该替换为/
这应该是正确的选项:
android:background="@+com.my.skin:drawable/background_image"
【讨论】:
以上是关于如何从xml中的另一个包加载资源?的主要内容,如果未能解决你的问题,请参考以下文章
如何从解决方案中的文件加载 XML 文件,使用嵌入式资源构建?项目 > 跨平台 > Xamarin.Forms