【问题标题】:How to load resource from another package in xml?如何从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 和可绘制资源中制作相同的内容:

例如:我有两个应用程序:

  • 应用程序 ma​​in 带有包“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"

但它不起作用,我的资源文件没有编译。

谁知道如何使用显式规范加载资源。

【问题讨论】:

    标签: android xml layout resources drawable


    【解决方案1】:

    让你的项目成为一个库项目,你可以在另一个 android 项目中引用它。

    图书馆项目

    这些项目包含可共享的 Android 源代码您可以在 Android 项目中引用的资源。当您有想要重用的公共代码时,这很有用。库项目不能安装到设备上,但是,它们会在构建时被拉入 .apk 文件中。

    有关更多信息,请查看主题图书馆项目下的链接。

    http://developer.android.com/tools/projects/index.html

    您的库项目将勾选一个复选框,如项目中所示。

    您可以将库项目添加到您的 android 项目中。右键单击您的项目。转到属性。在左侧面板中选择 Android。

    【讨论】:

      【解决方案2】:

      根据文档,您忘记在 @ 之后添加 +。最后的可绘制格式有一个错误输入:应该替换为/

      这应该是正确的选项:

      android:background="@+com.my.skin:drawable/background_image"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-13
        • 2015-02-19
        • 2011-05-06
        • 1970-01-01
        • 2012-07-04
        • 2010-11-13
        • 1970-01-01
        • 2012-07-25
        相关资源
        最近更新 更多