我有一个自定义的preferences控件,我已经在values/attrs.xml中为它定义了几个属性。为了集中讨论,下面是一个可以在values/attrs.xml中找到的属性示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="android:text"/>
<attr name="android:textColor"/>
<attr name="extraInformation" format="string" />
</declare-styleable>
</resources>要使用这些属性,可以在要使用的位置使用xmlns标记,它看起来如下所示:
xmlns:custom="http://schemas.android.com/apk/res/com.conundrum.app.lib"这就是问题所在: xmlns定义指代库的包名,并且该资源在库项目中编译得很好。但是,包含Library项目的Android项目具有不同的包名,并且Android尝试合并所有资源。当它到达这个xmlns定义时,它会停下来,因为包含Android项目中的包名是不同的。
有谁知道如何在库项目中使用xmlns引用,这些引用在包括Android项目中仍然有效?
当Android团队考虑库时,声明样式仅仅是他们的疏忽吗?
发布于 2013-11-05 01:31:42
使用http://schemas.android.com/apk/res-auto
我发现这个解决方案是作为AndroidSVG项目的附注给出的:
之外:注意名称空间中的特殊schema URL。如果您使用的是来自您自己项目的自定义视图,那么您将使用基于您的包名的URL。例如http://schemas.android.com/apk/res/com.example.customview。但是,由于自定义视图位于一个包含的库中,因此您应该使用res-auto快捷方式。实际架构URL将在构建应用程序时自动插入。
(我修复了上面引用的文本中的一个拼写错误-缺少/res/子文件夹)
发布于 2011-06-28 06:09:17
实际上,我使用了很多styleable和库,并有以下观察结果:
假设您有一个项目,其中包含主项目和包含库:
main
|--- libraryxmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE"令人惊讶的是,可以运行的是xmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE" (!)它看起来确实像是安卓团队忽视的东西,但一旦你知道了,它就能完美地工作。发布于 2011-07-28 05:27:28
这是安卓系统中的known issue。预计在开发工具的下一个版本(r13)中会有一个修复。
https://stackoverflow.com/questions/6471742
复制相似问题