19

我有两个具有相似功能但不同的可绘制对象和布局的 Android 应用程序。

我想将所有代码和资源放在一个库项目中,并覆盖引用该库的两个应用程序中的一些可绘制对象和布局。

我创建了一个引用该库的应用程序。我将所有资源从库复制到应用程序并更改了一些可绘制对象。我还更改了一些字符串资源。当我在 Eclipse 的布局编辑器中查看更改的布局之一时,我看到了正确的覆盖图像。

当我启动应用程序时,我看到我在应用程序中更改的字符串资源显示正确(库字符串被应用程序的资源覆盖),但我ImageView的 s 的可绘制对象都是从库的资源中获取的。

我还对一些布局资源进行了更改(移动并调整了一些图像的大小)。当我启动一个使用更改后的布局的活动(其源代码在库中的活动)时,我会看到新的(应用程序)布局和旧的(库)可绘制对象。

ImageView我尝试以两种方式定义 s 的可绘制对象:

  1. 在布局 xml 中:android:src="@drawable/image_id"

  2. 在活动代码中:

    ImageView view = (ImageView)findViewById(R.id.viewId);
    view.setImageResource(R.drawable.image_id);
    

在这两种情况下,我看到的图像都是从库项目的资源中获取的,而不是从应用程序中获取的。

如果我不能解决这个问题,我将不得不复制两个应用程序中的所有代码,这将是一种耻辱。

难道我做错了什么?

4

3 回答 3

6

根据我的经验,您可以使用 style 和 refs.xml 替换库模块中的可绘制资源。

首先,您需要以样式声明可绘制资源,例如

<style name="drawable_base_style">
    <item name="android:src">@drawable/base</item>
</style>

然后在应用程序(模块或项目,取决于您的 IDE)中,重新定义样式

<style name="drawable_base_style_app">
    <item name="android:src">@drawable/app</item>
</style>

并使用 refs.xml 指向新样式。

<item name="drawable_base_style" type="style">@style/drawable_base_style_app</item>

然后最后一步:交叉手指。

于 2015-05-07T22:27:17.733 回答
1

不要复制粘贴东西,检查您的设计,以便将 Drawable 的 resourceId 作为参数提供给您的对象。

于 2012-05-21T21:32:13.633 回答
0

正如我在上面的评论中所写,我设法通过清理项目并重新构建它们来解决我的问题。

于 2012-06-20T22:50:03.163 回答