写完了,记录一下思路
解析R.java文件,得到可选值集合,生成一个单独存放可选值的android_string.xsd文件,在定义的cartype.xsd用指令include进来即可,在自己定义的xml结构中能够使IDE提示可选项。
过程中又遇到了几个问题:
- 如何解析R.java ?
强调下这里是.java文件,而非.classs,刚开始懵逼地用URLClaassLoader加载这个文件,还以为自己的方式不对呢。后面使用了一个解析java文件的库, 挺有意思的库。
另外,似乎解析string.xml文件也可以,不懂当时脑子怎么没转过来。
- 如何在 gradle task 中依赖maven上包?
以前记得在buildscript下面的dependencies中添加依赖就可以了,使用classpath。这次发现,操作以上动作后,虽然已经将jar包下载到本地了,但在task中并不能引用响应的类,后来在在task中有添加dependencies{}方可正确引用。参看网上的资料,似乎都是在解释 taskA 依赖 taskB 的场景。
- 在xsd中如何让元素中一个属性类型依赖另一个属性值?
由于项目中定义的xml结构,不同的数据是根据其中的attribute中一个值做区分的.
<Car> <Item name = "id" value = "123"/> <Item name = "bandName" value = "kia"/> </Car>
这样做的原因是解析时是处理的标签少点吧。然后我查资料处理这个问题,看到了这个XSD allow attribute only depending on other attribute value,我根据答者的方法并没有成功,IDE也启动处理1.1版本的xsd了,看了答者附带的链接,真是超出了我的理解水平。
由于已经验证简单的xml结构能够使IDE正确提示可选项,且怀疑当前IDE可能并不完全支持xsd1.1(写了简单的测试例子也没生效),另外这样的提示方式有一个严重的不足,点击xml中的@string/xxx时期望是要跳到string.xml文件的,可是这里只能跳到定义的android_string.xsd,综上,故放弃让IDE提示输入了~