【问题标题】:Where are the schemas for XML files on an Android project?Android 项目中 XML 文件的架构在哪里?
【发布时间】:2010-10-10 22:59:25
【问题描述】:

AndroidManifest.xml 或布局等 Android 上使用的 XML 文件的架构(DTD 或 XML 架构)在哪里?

【问题讨论】:

    标签: xml android schema dtd


    【解决方案1】:

    架构不作为 xml 文件存在。模式取决于您的程序使用的 UI 类。有更好的讨论here

    【讨论】:

    • 那么写xmlns:app="http://schemas.android.com/apk/res/com.example.android.apis"是什么意思?
    • 我猜这只是一个评论:-( .
    • @Casebash 这意味着命名空间app 正在引用com.example.android.apis 包的资源,然后尝试解析在您的应用程序的attrs.xml 中声明的属性。 (此外,引用的库位于您的应用程序的同一命名空间中)您必须定义 xsi:schemaLocation 为命名空间提供 XSD 架构以进行验证。某些工具具有用于某些命名空间(xml、xsd、...)的内部预定义架构文件映射。
    • 与之相反:xaml 有它的标准和架构文件:blogs.windows.com/buildingapps/2017/05/19/…
    • @Will 不幸的是,您答案中的链接现在似乎已损坏
    【解决方案2】:

    通常,在 XML 中定义命名空间不必是一个真实的现有 URL,而只是一个全球唯一的字符串(因此人们更喜欢使用他们自己的 URL)。当然,如果这个 URL 包含 XML 模式(或更糟的是 DTD),那就太好了。如果有人会创建 Android Ressource Schemata,那也很好。我可以帮助他作为 CS 的学士论文。 - Solymosi 教授,柏林

    【讨论】:

    • 你的意思是 URI 只是一个符号,也许只意味着拥有的解析器?如果我们需要一个 DTD 模式文件来进行验证或完成,我们必须自己编写它吗?
    • 您不能随心所欲地编写模式的内容。架构是another XML,它与验证the XML 密切相关。旧的 XML 模式不是 XML 格式,而是 DTD,我认为今天不再使用 DTD
    【解决方案3】:

    XML 模式似乎没有记录,但这里有一个有用的所有布局对象及其允许属性的列表:

    http://developer.android.com/reference/android/R.styleable.html#lfields

    【讨论】:

      【解决方案4】:

      一直在搜索同一主题以了解 android studio 如何在 XML 中完成自动完成和内容,我也希望找到一些 XSD 或其他东西,但是:

      在 Android 中,我们混合使用静态和动态 DOM 定义:

      1-一些文件是使用类和注释定义的,例如见 Manifest(注意:要获得正确的信息,您应该最 可能使用合并的清单,但这超出了 本文档)。

      2-从资源中读取其他信息,使用命名约定来查找包含与给定 XML 标记相关的属性的样式。 例如,如果我们将标签识别为对应于 View 子类 在布局文件(例如“TextView”)中,我们找到对应的 styleable,查看它包含的属性并注册 DOM 扩展 对于与这些 attr 资源对应的给定标签。看 AttributeProcessingUtil 和 SubtagsProcessingUtil 用于读取的代码 styleables 和 AndroidDomExtender 用于插入的扩展 DOM 系统。

      3-有时样式是静态确定的,但属性是动态读取的,以与所使用的平台版本保持同步 在项目中。这是使用@Styleable 注解完成的。

      https://android.googlesource.com/platform/tools/adt/idea/+/refs/heads/mirror-goog-studio-master-dev/android/src/org/jetbrains/android/dom/README.md

      例如,这是在 android studio 的源代码中定义形状可绘制 XML 的方式:

      @DefinesXml
      @Styleable("GradientDrawable")
      public interface Shape extends DrawableDomElement {
        @Styleable("DrawableCorners")
        List<DrawableDomElement> getCornerses();
      
        @Styleable("GradientDrawableGradient")
        List<DrawableDomElement> getGradients();
      
        @Styleable("GradientDrawablePadding")
        List<DrawableDomElement> getPaddings();
      
        @Styleable("GradientDrawableSize")
        List<DrawableDomElement> getSizes();
      
        @Styleable("GradientDrawableSolid")
        List<DrawableDomElement> getSolids();
      
        @Styleable("GradientDrawableStroke")
        List<DrawableDomElement> getStrokes();
      }
      

      styleables(如 GradientDrawablePadding)在 android 的 attrs.xml 中定义

      https://android.googlesource.com/platform/tools/adt/idea/+/refs/heads/mirror-goog-studio-master-dev/android/src/org/jetbrains/android/dom/drawable/Shape.java

      【讨论】:

        【解决方案5】:

        如果您在识别 http://schemas.android.com/apk/res/android 之类的架构时遇到问题,可以在 设置(或 首选项)下添加它 > Languages &框架 > 架构和DTD。单击“忽略的架构和 DTD”下的 + 号并添加架构 URL。您不应再收到代码错误/警告。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-08
          • 2018-09-04
          • 2010-11-01
          • 1970-01-01
          • 2016-09-06
          • 1970-01-01
          • 2010-12-06
          相关资源
          最近更新 更多