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

Era*_*ran 15 android drawable android-imageview android-library

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

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

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

当我启动应用程序时,我看到我在应用程序中更改的字符串资源正确显示(库字符串被应用程序的资源覆盖),但我的ImageViews 的drawables 都取自库的资源.

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

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

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

  2. 在活动的代码中:

    ImageView view = (ImageView)findViewById(R.id.viewId);
    view.setImageResource(R.drawable.image_id);
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我看到的图像都来自库项目的资源,而不是应用程序.

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

难道我做错了什么?

Zep*_*hyr 6

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

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

<style name="drawable_base_style">
    <item name="android:src">@drawable/base</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<style name="drawable_base_style_app">
    <item name="android:src">@drawable/app</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<item name="drawable_base_style" type="style">@style/drawable_base_style_app</item>
Run Code Online (Sandbox Code Playgroud)

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


Era*_*ran -1

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

  • 您的“解决方案”没有提供您在“清理项目并重建它们”时到底做了什么的详细信息。你是否亲手删除了一些资源?你执行gradle的clean任务了吗? (4认同)
  • 不确定投反对票的目的是什么。这个答案确实解决了我的问题。不然我也不会在这里发帖。 (2认同)