android - 在自定义文件中引用字符串资源并在键入 @string 之类的内容时选择显示自动完成弹出对话框
问题描述
我想做的和这个问题一样。
这个问题可以分为两部分。
首先,在自定义XML文件中引用字符串,感谢我上面提到的问题的作者,这个问题解决了。
其次,我被问到,如何在键入 @string 之类的字符串时显示自动完成弹出对话框以选择字符串。
我提到的问题大约在四年前被问过,我认为问题的第二部分也需要解决,没有自动完成,输入字符串是如此难以忍受。
我尝试像XSD - Autocomplete and Validate XML in IDE那样做,但我失败了。
解决方案
我做到了。
粗略地说,创建 XML 的模式并应用它。使用模式,IDE 可以知道您的 XML 文件结构,然后提供弹出对话框以显示可用选项。
如果您是 schema 的新手,请不要害怕,因为它很容易理解,我们可以使用 Android Studio 来生成它。
如何生成模式文件?
首先,选择您的 XML 文件,然后按 ++ctrl
键显示操作输入对话框。键入“Generate”,您会发现 的操作,神奇地为您创建 XML 模式。shift
A
Generate 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>
推荐阅读
- python - 对于给定的稀疏矩阵,如何将其与给定的二进制值向量相乘
- android - java.lang.NoClassDefFoundError:解析失败:Lcom/Google/Android/gms/common/API/API$zzf;
- php - 上传文件后运行 PHP 代码
- amazon-web-services - 使用 AWS Cognito 连接到基于 VPC 的 Kibana
- mixins - for 什么时候调用迭代器方法?
- python - 保存相关变量的 Pythonic 方式?
- python - anaconda 导航器未打开并出现错误 active.bat
- python - 在保留空格分隔符的同时拆分字符串
- java - 原因:com.businessobjects.bcm.BCM 处的 java.lang.ExceptionInInitializerError。
(BCM.java:1144) - git - 如何将现有的非空目录转换为 Git 工作目录并将文件推送到远程分支