如何覆盖Android库项目中定义的drawable?

时间:2012-05-21 21:16:40

标签: android drawable android-imageview android-library

我有两个Android应用程序具有类似的功能,但不同的drawable和布局。

我想将所有代码和资源放在库项目中,并覆盖引用该库的两个应用程序中的一些drawable和layout。

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

当我启动应用程序时,我看到我在应用程序中更改的字符串资源正确显示(库字符串被应用程序的资源覆盖),但我的ImageView的drawable都被占用了来自图书馆的资源。

我还对一些布局资源进行了更改(移动并调整了一些图像的大小)。当我启动使用更改的布局的活动(源代码在库中的活动)时,我看到带有旧(库)drawable的新(应用程序)布局。

我尝试用两种方式定义ImageView s的drawable:

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

  2. 在活动代码中:

    ImageView view = (ImageView)findViewById(R.id.viewId);
    view.setImageResource(R.drawable.image_id);
    
  3. 在这两种情况下,我看到的图像都来自库项目的资源,而不是应用程序。

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

    我做错了吗?

3 个答案:

答案 0 :(得分:6)

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

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

<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>

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

不要复制粘贴内容,检查您的设计,以便将Drawable的resourceId作为对象的参数。