首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android库项目使用declare-styleable --如何编译?

Android库项目使用declare-styleable --如何编译?
EN

Stack Overflow用户
提问于 2011-06-25 01:48:52
回答 6查看 6K关注 0票数 14

我有一个自定义的preferences控件,我已经在values/attrs.xml中为它定义了几个属性。为了集中讨论,下面是一个可以在values/attrs.xml中找到的属性示例:

代码语言:javascript
复制
<?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标记,它看起来如下所示:

代码语言:javascript
复制
xmlns:custom="http://schemas.android.com/apk/res/com.conundrum.app.lib"

这就是问题所在: xmlns定义指代库的包名,并且该资源在库项目中编译得很好。但是,包含Library项目的Android项目具有不同的包名,并且Android尝试合并所有资源。当它到达这个xmlns定义时,它会停下来,因为包含Android项目中的包名是不同的。

有谁知道如何在库项目中使用xmlns引用,这些引用在包括Android项目中仍然有效?

当Android团队考虑库时,声明样式仅仅是他们的疏忽吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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/子文件夹)

票数 6
EN

Stack Overflow用户

发布于 2011-06-28 06:09:17

实际上,我使用了很多styleable和库,并有以下观察结果:

假设您有一个项目,其中包含主项目和包含库:

代码语言:javascript
复制
main
   |--- library

  • 使用包含的库编译应用程序是没有问题的,即使库中包含了styleable。例如,您可以包含我的一个库( http://code.google.com/p/tree-view-list-android/ )。您将在该库中找到许多可设置样式的属性(如可折叠的)和一些使用它的XML。无论您是单独编译库还是作为包含的库,都可以很好地编译和工作。
  • 现在,当你在库和主项目中有相同名称的资源时,你可能会遇到编译主项目的奇怪问题。起初我不理解它,但现在我知道它是如何工作的。例如,如果在你的库main.xml中有android:id=“@+id/android:id=_id”,然后在你的主项目中有另一个main.xml (没有some_id id),那么R.id.some_id将在你编译库时生成,但不会在主项目中生成-这可能会导致主项目的编译错误,因为包含的库.java文件最有可能使用R.id.some_id (将会丢失)。我最初误解了这个问题,并试图动态获取id,但最后并不需要它-它足以确保库中的布局xmls使用某种私有命名空间。
  • ,现在最有趣的部分-如何引用项目的layout.xmls中的可设置样式的参数?正如您所注意到的,以下代码将不起作用:xmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE"令人惊讶的是,可以运行的是xmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE" (!)它看起来确实像是安卓团队忽视的东西,但一旦你知道了,它就能完美地工作。
票数 9
EN

Stack Overflow用户

发布于 2011-07-28 05:27:28

这是安卓系统中的known issue。预计在开发工具的下一个版本(r13)中会有一个修复。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6471742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档