android - 从模板生成新对象时,如何将template.xml参数值转换为小写?

标签 android gradle

我已经创建了一个带有初始化参数的自定义模板,该参数的值必须按原样使用,有时使用小写形式。

这是自定义模板的文件 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/

相关文章:

android - 将 Android Studio 0.6.1 迁移到 0.8 : [PATH] does not appear to be Android Studio config folder or installation home

Gradle:依赖和配置之间有什么联系?

android - 你如何结合多种 gradle 口味或排除一种?

gradle - Android - DJI UX SDK 和 Espresso - VerifyError

visual-studio - Gradle ExecTask和Windows启动

java - 无法为扩展名“application”设置未知属性 'mainClass'

android - 如何从以下示例中实现 AsyncTask?

android - 用于 Android 调试 key 的 keytool 提供垃圾值

java - android:在多个 TextView 上绘制连续的字符串

java - 创建自定义 View 并重用同一 View