【问题标题】:How to override drawables defined in an Android Library Project?如何覆盖 Android 库项目中定义的可绘制对象?
【发布时间】:2012-05-28 09:29:21
【问题描述】:

我有两个 Android 应用程序,它们的功能相似,但绘图和布局不同。

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

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

当我启动应用程序时,我看到我在应用程序中更改的字符串资源正确显示(库字符串被应用程序的资源覆盖),但我的ImageViews 的可绘制对象全部取自图书馆资源。

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

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

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

  2. 在活动代码中:

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

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

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

我做错了吗?

【问题讨论】:

  • 我为你的问题投了票,因为它看起来很有用,尤其是你自己的答案,在 cmets 中提供。我认为覆盖drawables与覆盖方法一样重要,并且使事情变得更容易和简化。不需要过多的参数和编码。

标签: android drawable android-imageview android-library


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 不确定反对票的用途。这个答案确实解决了我的问题。否则我不会在这里发布。
    • 您的“解决方案”没有提供您在“清理项目并重建它们”时所做的详细信息。您是否手动删除了一些资源?你执行 gradle 的 clean 任务了吗?
    • @StAlex 我已经很久没有发布这个了,所以我不记得细节了,但我相信我在我的 Eclipse IDE 中清理了项目并重建了它们。 “clean”是您可以在 Eclipse 项目上执行的操作。
    【解决方案3】:

    根据我的经验,您可以使用 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>
    

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

    【讨论】:

    • 请写下,我们应该将drawable_base_style_app 样式放在哪个文件中? refs.xml 保存在哪里?编译失败,因为 drawable_state_selected_style 重复。
    猜你喜欢
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多