首页 > 解决方案 > 在自定义文件中引用字符串资源并在键入 @string 之类的内容时选择显示自动完成弹出对话框

问题描述

我想做的和这个问题一样。

这个问题可以分为两部分。

首先,在自定义XML文件中引用字符串,感谢我上面提到的问题的作者,这个问题解决了。

其次,我被问到,如何在键入 @string 之类的字符串时显示自动完成弹出对话框以选择字符串

我提到的问题大约在四年前被问过,我认为问题的第二部分也需要解决,没有自动完成,输入字符串是如此难以忍受。

我尝试像XSD - Autocomplete and Validate XML in IDE那样做,但我失败了。

标签: androidxml

解决方案


我做到了。

粗略地说,创建 XML 的模式并应用它。使用模式,IDE 可以知道您的 XML 文件结构,然后提供弹出对话框以显示可用选项。

如果您是 schema 的新手,请不要害怕,因为它很容易理解,我们可以使用 Android Studio 来生成它。

如何生成模式文件?

首先,选择您的 XML 文件,然后按 ++ctrl键显示操作输入对话框。键入“Generate”,您会发现 的操作,神奇地为您创建 XML 模式。shiftAGenerate XSD file from XML file ...

然后将它应用到您的 XML 中,如何?

我想我不必展示具体的步骤,因为它是不必要的。(可能没人看我写到这里主要是给我留个便条)

我遇到的最大问题是如何为属性定义限制。我是怎么做到的?

在我的 Gradle 任务中,我使用java 解析器解析 R.java 的文件并获取字符串列表,然后创建.xsd文件以创建限制类型。然后,在主“.xsd”文件中,包含它,并将类型应用于属性。

  // file: cartype.xml  our target
  <Car>
      <item boxId="1"  bandName="@string/xxx"  ... />
  </Car>


  // define a type for the attriute of bandName and tell what can be select
  <xs:simpleType name="AndroidStringType">
    <xs:restriction >
      <xs:enumeration value="1" />
      <xs:enumeration value="2" />
      <xs:enumeration value="3" />
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="itemType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute type="xs:string" name="boxId"/>
        // apply the type to the attribute
        <xs:attribute type="AndroidStringType" name="bandName"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  

推荐阅读