如何在Android XML资源中引用库模块中定义的颜色
问题:Android库模块中资源的XML引用方式
背景与原代码情况
- 主模块Fragment布局文件路径:
app/src/main/res/layout/fragment_main.xml - 原颜色资源定义在主模块的
app/src/main/res/values/colors.xml,内容如下:
<resources> <color name="bg_line">#E7E7E7</color> ... </resources>
- 原布局中引用该颜色的代码:
<RelativeLayout android:background="@color/bg_line" ... > ... </RelativeLayout>
重构需求
将颜色bg_line迁移至库模块mylib的mylib/src/main/res/values/colors.xml中,该库模块的Manifest文件包名配置为:
<manifest package="de.k3b.mylib" ...>
核心问题
如何在主模块的fragment_main.xml中正确引用库模块里的bg_line颜色资源?
参考与尝试过的无效方式
根据Android官方文档,资源引用格式为:
resource reference:
In Java: R.color.filename
In XML: @[package:]color/filename
但未找到[package:]的实际使用示例,已尝试以下无效引用方式:
android:background="@android:color/bg_line"android:background="@app:color/bg_line"android:background="@mylib:color/bg_line"android:background="@de.k3b.mylib:color/bg_line"
使用的Android Studio版本:Electric Eel | 2022.1.1 Patch 2
正确解决方案
正确的引用方式是使用库模块的Manifest包名作为前缀,代码如下:
android:background="@de.k3b.mylib:color/bg_line"
同时需要确保以下几点:
- 主模块
app已在build.gradle中正确依赖:mylib模块:
dependencies { implementation project(":mylib") }
- 库模块
mylib的colors.xml中确实存在bg_line的定义:
<resources> <color name="bg_line">#E7E7E7</color> ... </resources>
- 清理并重新构建项目(依次点击Android Studio菜单栏的
Build > Clean Project和Build > Rebuild Project),避免缓存导致的引用识别异常。
若之前尝试该格式无效,多数是缓存问题,重新构建后即可正常识别。
内容的提问来源于stack exchange,提问作者k3b
相关产品推荐
相关产品推荐

