【发布时间】:2011-09-22 05:44:52
【问题描述】:
我有一个自定义首选项控件,我在 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 的包名,并且该资源在 LIBRARY 项目中编译得很好。但是,包含 Library 项目的 Android 项目具有不同的包名称,Android 会尝试合并所有资源。当它到达这个 xmlns 定义时,它会因为包含 Android 项目中的包名称不同而犹豫不决。
有人对在包含 Android 项目中仍然有效的库项目中使用 xmlns 引用有任何想法吗?
declare-styleables 是否只是 Android 团队在考虑库时的疏忽?
【问题讨论】:
-
如果 lib 包位于 app 包中,即 app 包是“com.conundrum.app”并且 lib 类位于“com.conundrum.app.lib”中,它是否有效?而且,您是否尝试过在布局文件中使用完整的类名标签,而不是为其添加前缀?
-
我的包名目前是你推荐的。问题是你真的不能使用完整的类名,因为包的不同取决于构建器的角度(无论你当前是在库项目中还是在 Android 项目中)。此外,在这种情况下,我在首选项文件中使用 xmlns 引用,而不是布局。