我已经创建了一个带有初始化参数的自定义模板,该参数的值必须按原样使用,有时使用小写形式。
这是自定义模板的文件 template.xml 中编码的参数定义:
<parameter
id="itemClass"
name="ListView Item Name"
type="string"
constraints="class|unique|nonempty"
default="ItemClass"
help="The name of the class of the ListView item" />
它用于生成java类文件和相关的xml布局文件。
用作类名时,通常使用大写字母,对于Java类文件(即MyItemClass.java)而言,这不是问题。
当创建相关的xml布局文件时会出现问题,因为使用相同参数的名称不符合应用于XML资源文件(MyItemClass_layout.xml而不是myitemclass_layout.xml)的全部小写规则。
这是我在模板的配方.xml.ftl 文件中使用的构建语句:
<instantiate from="root/src/app_package/ItemClass.${ktOrJavaExt}.ftl"
to="${escapeXmlAttribute(srcOut)}/${itemClass}.java" />
<open file="${escapeXmlAttribute(srcOut)}/${itemClass}.${ktOrJavaExt}" />
<instantiate from="root/res/layout/item_layout.xml.ftl"
to="${escapeXmlAttribute(resOut)}/layout/${itemClass}_layout.xml" />
<open file="${escapeXmlAttribute(resOut)}/layout/${itemClass}_layout.xml" />
因此,我需要在第二条语句中对$ {itemClass}取消大写,以获取有效的xml文件名。
能做到吗
最佳答案
根据可以在activity / MasterDetailFlow / globals.xml.ftl上找到的示例,可以使用lower_case来实现。
<instantiate from="root/src/app_package/ItemClass.${ktOrJavaExt}.ftl"
to="${escapeXmlAttribute(srcOut)}/${itemClass}.java" />
<open file="${escapeXmlAttribute(srcOut)}/${itemClass}.${ktOrJavaExt}" />
<instantiate from="root/res/layout/item_layout.xml.ftl"
to="${escapeXmlAttribute(resOut)}/layout/${itemClass?lower_case}_layout.xml" />
<open file="${escapeXmlAttribute(resOut)}/layout/${itemClass?lower_case}_layout.xml" />
FreeMarker允许的功能的完整列表可以是found here。
关于android - 从模板生成新对象时,如何将template.xml参数值转换为小写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56305726/