Ann*_*era 9 android android-resources android-studio
我有一个主应用程序模块以及一些库模块.
我的Library模块如何从Main App模块引用资源.
例如:我的基本应用程序有一个colors.xml,它有一个名为"AppPrimary"的颜色项,它是蓝色的.
在我的库中,我想要一个xml布局中的视图来引用@ color/AppPrimary颜色,但这不起作用.
我怎样才能做到这一点?
编辑:我应该指定这不是专门的appCompat资源.在我的主模块中只是通用字符串/颜色/样式/.如何在我的库模块colors.xml/strings.xml中的同一项目中引用它们?
在库模块中的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)
归档时间: |
|
查看次数: |
6580 次 |
最近记录: |