jks*_*der 14 android declare-styleable
我有一个自定义首选项控件,我已在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>
Run Code Online (Sandbox Code Playgroud)
要使用这些属性,可以使用要在其中使用的xmlns标记,它看起来像这样:
xmlns:custom="http://schemas.android.com/apk/res/com.conundrum.app.lib"
Run Code Online (Sandbox Code Playgroud)
这就是问题所在:xmlns定义引用了LIBRARY的包名,这个资源在LIBRARY项目中编译得很好.但是,包含Library项目的Android项目具有不同的包名称,Android尝试合并所有资源.当它到达这个xmlns定义时,它会变得很糟糕,因为包含Android项目的包名称是不同的.
有没有人对在包含Android项目时仍然有效的库项目中使用xmlns引用有任何想法?
声明风格只是Android团队在考虑图书馆时的疏忽吗?
我实际上玩了很多样式和库,并有以下观察:
想象一下,你有一个拥有主项目和包含库的项目:
main
|--- library
Run Code Online (Sandbox Code Playgroud)
xmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE"
令人惊讶的是,xmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE"它确实起作用(!)它确实看起来像是安卓团队的一个忽视,但一旦你知道它,它就完美无瑕.使用 http://schemas.android.com/apk/res-auto
我发现这个解决方案随便作为AndroidSVG项目中的旁注:
旁白:请注意命名空间中的特殊架构URL.如果您使用自己项目中的自定义视图,则可以使用基于包名称的URL.例如http://schemas.android.com/apk/res/com.example.customview.但由于自定义视图位于包含的库中,因此您应该使用res-auto快捷方式.构建应用程序时,将自动插入真实的架构URL.
(我在上面引用的文字中修正了一个错字 - 缺失/ res /子文件夹)
| 归档时间: |
|
| 查看次数: |
5599 次 |
| 最近记录: |