我有一个自定义首选项控件,我在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引用有任何想法吗?
宣称风格只是Android团队在考虑图书馆时的疏忽吗?
答案 0 :(得分:9)
我实际上玩了很多风格和图书馆并且有以下观察结果:
想象一下,你有一个拥有主项目和包含库的项目:
main
|--- library
xmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE"
令人惊讶的是,xmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE"
(!)
它确实看起来像是一个从安卓团队的忽视,但一旦你知道它,它完美无瑕。答案 1 :(得分:6)
使用http://schemas.android.com/apk/res-auto
我发现这个解决方案随便作为AndroidSVG项目中的旁注:
除此之外:请注意命名空间中的特殊架构URL。如果您使用自己项目中的自定义视图,则可以使用基于包名称的URL。例如http://schemas.android.com/apk/res/com.example.customview。但由于自定义视图位于包含的库中,因此您应该使用res-auto快捷方式。构建应用程序时,将自动插入真实的架构URL。
(我在上面引用的文字中修正了一个拼写错误/ res /子文件夹)
答案 2 :(得分:5)
这是Android中的known issue。预计在开发工具的下一个版本(r13)中将进行修复。
答案 3 :(得分:3)
我也有同样的问题。我的应用程序未检测到库项目样式的xml。
我试过了:
我的图书馆计划包:com.lib.mylibrary 我的应用程序项目包:com.app.myapp
我尝试了xmlns:custom="http://schemas.android.com/apk/res/com.app.myapp
而不是xmlns:custom="http://schemas.android.com/apk/res/com.lib.mylib
它工作得很好,即。 尝试
xmlns:custom="http://schemas.android.com/apk/res/<your app package>
而不是
xmlns:custom="http://schemas.android.com/apk/res/<your lib project package>
我有这个想法here
答案 4 :(得分:1)
可能有点晚了,但问题似乎在开发工具的最新版本(r14)中得到修复。
答案 5 :(得分:0)
这为我修好了。我还记得Xamarin有这个问题,同样的解决方案适用于Xamarin。
的xmlns:AB =&#34; HTTP://schemas.android.com/apk/res-auto"