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

Ann*_*era 9 android android-resources android-studio

我有一个主应用程序模块以及一些库模块.

我的Library模块如何从Main App模块引用资源.

例如:我的基本应用程序有一个colors.xml,它有一个名为"AppPrimary"的颜色项,它是蓝色的.

在我的库中,我想要一个xml布局中的视图来引用@ color/AppPrimary颜色,但这不起作用.

我怎样才能做到这一点?

编辑:我应该指定这不是专门的appCompat资源.在我的主模块中只是通用字符串/颜色/样式/.如何在我的库模块colors.xml/strings.xml中的同一项目中引用它们?

r0a*_*kll 9

在库模块中的xml布局参考?attr/colorPrimary而不是@color/AppPrimary

这会引用应用主题中的调色板属性.即;

<item name="colorPrimary">@color/AppPrimary</item>
Run Code Online (Sandbox Code Playgroud)

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

<item name="colorPrimaryDark">...</item> -> ?attr/colorPrimaryDark
<item name="colorAccent">...</item> -> ?attr/colorAccent
Run Code Online (Sandbox Code Playgroud)

等等.

请参阅此文档

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

- 编辑 -

简短的回答是,您无法从引用库colors.xml文件的主模块中"获取"定义的颜色.

但是,您可以在主题中利用自定义属性来实现相同的效果.

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

<declare-styleable name="BaseTheme">
    <attr name="someColor" format="reference|color" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

注意: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>
Run Code Online (Sandbox Code Playgroud)

定义完成后,您可以在库模块XML代码中引用该属性.例如;

<TextView
    ...
    android:textColor="?attr/someColor"
    />
Run Code Online (Sandbox Code Playgroud)