我有两个Android应用程序具有类似的功能,但不同的drawable和布局。
我想将所有代码和资源放在库项目中,并覆盖引用该库的两个应用程序中的一些drawable和layout。
我创建了一个引用该库的应用程序。我将所有资源从库复制到应用程序并更改了一些drawable。我也改变了一些字符串资源。当我在Eclipse中的布局编辑器中查看其中一个更改的布局时,我看到了正确覆盖的图像。
当我启动应用程序时,我看到我在应用程序中更改的字符串资源正确显示(库字符串被应用程序的资源覆盖),但我的ImageView
的drawable都被占用了来自图书馆的资源。
我还对一些布局资源进行了更改(移动并调整了一些图像的大小)。当我启动使用更改的布局的活动(源代码在库中的活动)时,我看到带有旧(库)drawable的新(应用程序)布局。
我尝试用两种方式定义ImageView
s的drawable:
:android:src="@drawable/image_id"
在活动代码中:
ImageView view = (ImageView)findViewById(R.id.viewId);
view.setImageResource(R.drawable.image_id);
在这两种情况下,我看到的图像都来自库项目的资源,而不是应用程序。
如果我无法解决这个问题,我将不得不复制这两个应用程序中的所有代码,这将是一种耻辱。
我做错了吗?
答案 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作为对象的参数。