Android Studio中其他模块的参考资源

我有一个主要的应用程序模块以及一些库模块。

我的库模块如何引用主应用程序模块中的资源。

例如:我的基本应用程序有一个colors.xml,它有一个叫做“AppPrimary”的颜色项,它是蓝色的。

在我的库中,我想在xml布局中引用@ color / AppPrimary颜色,但这不起作用。

我怎样才能做到这一点?

编辑:我应该指定这不是专门appCompat资源。 只是通用的string/颜色/风格/在我的主要模块。 我怎样才能在我的库模块colors.xml / strings.xml中的同一个项目中引用它们?

Solutions Collecting From Web of "Android Studio中其他模块的参考资源"

在您的库模块中的xml布局引用?attr/colorPrimary而不是@color/AppPrimary

这引用了应用主题中的调色板属性。 即;

 <item name="colorPrimary">@color/AppPrimary</item> 

您也可以参考其他调色板属性,如:

 <item name="colorPrimaryDark">...</item> -> ?attr/colorPrimaryDark <item name="colorAccent">...</item> -> ?attr/colorAccent 

等等。

请参阅此文档

CAVEAT
这些示例引用了主题中的AppCompat实现。 即没有android:命名空间前缀。

– 编辑 –

简单的答案是,你根本无法从你的库colors.xml文件引用你的主模块'获取'定义的颜色。

但是,您可以利用自定义的主题中的属性来达到相同的效果。

这可以通过在库模块的attrs.xml文件中声明一个通用样式来实现,例如:

 <declare-styleable name="BaseTheme"> <attr name="someColor" format="reference|color" /> </declare-styleable> 

注意:styleable的名字对这个实现没有任何影响,所以你可以随便命名它。

然后在'style.xml'或'theme.xml'文件的主模块的主题定义中,您需要将此属性设置为您要共享的颜色,如下所示:

 <style name="Theme.Example" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Color Palette --> <item name="colorPrimary">...</item> <item name="colorPrimaryDark">...</item> <item name="colorAccent">...</item> <!-- Here we define our custom attributes --> <item name="someColor">@color/dark_blue</item> </style> 

一旦定义了这个,你可以引用你的库模块XML代码中的属性。 例如;

 <TextView ... android:textColor="?attr/someColor" />