1

我在父项目中使用引用库(属性/Android/库)。引用的库在其屏幕/布局文件之一中使用颜色/透明。父项目也有颜色/透明,但与引用库的颜色/透明中使用的值不同。引用库的代码使用父项目中的值。我必须通过 android:background="#000000" 将引用库的值硬编码为特定值。有没有办法让引用的库使用自己的颜色值,而不是继承父项目的相同命名属性的值?

4

1 回答 1

3

这就是 Android 库项目设计为在 Android SDK 中工作的方式。Android Library Project 永远不会直接构建,它总是在构建依赖的 Main Project 时间接构建,当 SDK 编译/构建 Main Project 时,来自 Library Project 的源和资源被过滤并合并到 Main Project 中。当主项目和库项目中定义相同的资源名称时,主项目中的资源名称始终具有第一优先级。

查看官方开发指南

但是,库项目与标准 Android 应用程序项目的不同之处在于,您不能将其直接编译为自己的 .apk 并在 Android 设备上运行。同样,您不能将库项目导出到自包含的 JAR 文件,就像对真正的库所做的那样。相反,您必须通过在依赖应用程序中引用库并构建该应用程序来间接编译库。

当您构建依赖于库项目的应用程序时,SDK 工具会将库编译为临时 JAR 文件并在主项目中使用,然后使用结果生成 .apk。如果在应用程序和库中都定义了资源 ID,这些工具会确保应用程序中声明的资源获得优先级,并且库项目中的资源不会编译到应用程序 .apk 中。这使您的应用程序可以灵活地使用或重新定义在任何库中定义的任何资源行为或值。

解决方案是将主项目中的资源名称重命名为 color/transparent2 之类的其他名称。希望这有帮助。

于 2012-04-08T23:20:02.897 回答