<!DOCTYPE html>
<html>
<!--
  Copyright 2012 The Android Open Source Project

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->
<head>
  <meta charset="utf-8">
  <title>ADT Template Format</title>
  <link rel="stylesheet" href="cssreset-min.css">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:regular,medium,thin,italic,mediumitalic,bold;Inconsolata" title="roboto">
  <link rel="stylesheet" href="prettify.css">
  <link rel="stylesheet" href="default.css">
  <script src="jquery-1.8.0.min.js"></script>
  <script src="prettify.js"></script>
  <script src="default.js"></script>
</head>
<body>
  
<nav>

</nav>

<div id="page-content">

<h1>ADT Template Format</h1>
<br>
<dl style="margin:0">
  <dt>Status</dt>
  <dd style="margin:0">Draft</dd>

  <dt>Format Version</dt>
  <dd style="margin:0">3</dd>

  <dt>Last Updated</dt>
  <dd style="margin:0">8/30/2012</dd>
</dl>





<h2>Overview</h2>

<p>This document describes the format and syntax for Android code templates. These templates provide starting points for entire projects (e.g. <code>NewAndroidApplication</code>) or application components such as activities (e.g. <code>BlankActivity</code>).</p>

<p>Although these templates were originally introduced in the <a href="http://developer.android.com/tools/sdk/eclipse-adt.html">ADT Plugin</a> for Eclipse, the template format is designed for use by any IDE or command-line tool.</p>

<p>Templates are customizable. Each template exposes several options (called parameters) that allow developers to customize the generated code. The most common workflow for <em>using</em> a template is as follows:</p>

<ol>
  <li>Choose a template.</li>
  <li>Populate template options (parameters).</li>
  <li>Preview and then execute the additions/changes to your project.</li>
</ol>

<h3>FreeMarker</h3>

<p>Templates make heavy use of <a href="http://freemarker.sourceforge.net/">FreeMarker</a>, a Java templating engine used to enable things like control flows and variable substitutions inside files. It's similar to PHP, Django templates, etc. For those more acquainted with C/C++, think of it as a <a href="http://en.wikipedia.org/wiki/C_preprocessor">preprocessor</a> language (i.e. <code>#ifdef</code>).</p>

<p>By convention, any file in the template directory structure that is to be processed by FreeMarker should have the <code>.ftl</code> file extension. So if one of your source files is <code>MyActivity.java</code>, and it contains FreeMarker instructions, it should be named something like <code>MyActivity.java.ftl</code>.</p>

<p>For more documentation on FreeMarker, see the <a href="http://freemarker.sourceforge.net/docs/index.html">docs</a>. In particular, the <a href="http://freemarker.sourceforge.net/docs/ref_builtins_string.html">reference on string operations</a>.</p>

<p>An example, templated version of an Android manifest, normally named <code>AndroidManifest.xml.ftl</code> is shown below.</p>

<pre class="prettyprint lang-xml">
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;application&gt;
        &lt;activity android:name="<strong>.${activityClass}</strong>"
            android:label="@string/title_<strong>${activityToLayout(activityClass)}</strong>">
            <strong>&lt;#if parentActivityClass != ""&gt;</strong>
            &lt;meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value="<strong>${parentActivityClass}</strong>" /&gt;
            <strong>&lt;/#if&gt;</strong>
            <strong>&lt;#if isLauncher&gt;</strong>
            &lt;intent-filter&gt;
                &lt;action android:name="android.intent.action.MAIN" /&gt;
                &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
            &lt;/intent-filter&gt;
            <strong>&lt;/#if&gt;</strong>
        &lt;/activity&gt;
    &lt;/application&gt;
&lt;/manifest&gt;
</pre>

<p>In this example excerpt from the <code>BlankActivity</code> template:</p>

<ul>
  <li>The expression <code>${activityClass}</code> is bound to the value of the 'Activity Class' template parameter.</li>
  <li>The expression <code>${activityToLayout(activityClass)}</code> uses the <code>activityToLayout</code> method built into ADT to convert an activity class such as <code>MyFooActivity</code> to <code>activity_my_foo</code>.</li>
  <li>The <code>isLauncher</code> boolean variable and <code>parentActivityClass</code> string varaibles are bound to the values of the 'Launcher Activity' and 'Hierarchical Parent' template parameter, respectively.</li>
</ul>





<h2>Directory Structure</h2>

<p>A template is a directory containing a number of XML and FreeMarker files. The only two mandatory files are <code>template.xml</code> and <code>recipe.xml.ftl</code>. Template source files (PNG files, templated Java and XML files, etc.) belong in a <code>root/</code> subdirectory. An example directory structure for a template is below:</p>

<ul>
  <li><strong>MyTemplate/</strong> <span class="dim">&mdash; Root directory</span><ul>
    <li><a href="#toc_templatexml">template.xml</a> <span class="dim">&mdash; Metadata (description, parameters, etc.)</span></li>
    <li><a href="#toc_recipexmlftl">recipe.xml.ftl</a> <span class="dim">&mdash; Instructions/script (files to copy, etc.)</span></li>
    <li><a href="#toc_globalsxmlftl">globals.xml.ftl </a><span class="dim">&mdash; Optional global variables</span></li>
    <li>template.png <span class="dim">&mdash; Default template thumbnail</span></li>
    <li>template_foo.png <span class="dim">&mdash; Thumbnail when option 'foo' is selected</span></li>
    <li>template_bar.png</li>
    <li><strong><a href="#toc_root">root/</a></strong> <span class="dim">&mdash; Source files (which get processed/copied/merged with the output project)</span><ul>
      <li>AndroidManifest.xml.ftl</li>
      <li><strong>res/</strong> <ul>
        <li>&hellip;</li>
      </ul></li>
      <li><strong>src/</strong> <ul>
        <li><strong>app_package/</strong> <ul>
          <li>MyActivity.java.ftl</li>
        </ul></li>
      </ul></li>
    </ul></li>
  </ul>
</li>
</ul>
<br>

<p>More on the role of each of these files is discussed in the sections below.</p>

<h3>template.xml</h3>

<p>Each template directory must contain a <code>template.xml</code> file. This XML file contains metadata about the template, including the name, description, category and user-visible parameters that the IDE will present as options to the user. The XML file also indicates the name of the <a href="#toc_recipexmlftl">recipe XML file</a> (which gets processed by FreeMarker), and the <a href="#toc_globalsxmlftl">global variables XML file</a> if there are global variables besides the template parameter values that should be visible to all FreeMarker-processed files (<code>.ftl</code> files).</p>

<p>An example <code>template.xml</code> is shown below.</p>

<pre class="prettyprint lang-xml">
&lt;!-- A template for a blank activity. Use template format
     version 3, as described in this document. -->
&lt;template
    format="3"
    revision="1"
    minApi="4"
    minBuildApi="11"
    name="New Blank Activity"
    description="Creates a new blank activity, with navigation."&gt;

    &lt;!-- Indicate that the Android Support Library (r8) should be
         added to the project, if it isn't already in the project. -->
    &lt;dependency name="android-support-v4" revision="8" /&gt;

    &lt;category value="Activities" /&gt;

    &lt;!-- A string parameter; the value is available to FreeMarker
         processed files (.ftl files) as ${activityName}. -->
    &lt;parameter
        id="activityName"
        name="Activity Name"
        type="string"
        constraints="class|nonempty"
        suggest="${layoutToActivity(layoutName)}"
        default="MainActivity"
        help="The name of the activity class to create." /&gt;

    &lt;parameter
        id="layoutName"
        name="Layout Name"
        type="string"
        constraints="layout|unique"
        suggest="${activityToLayout(activityClass)}"
        default="main"
        help="The name of the layout to create for the activity" /&gt;

    &lt;parameter
        id="navType"
        name="Navigation Type"
        type="enum"
        default="none"&gt;
        &lt;option id="none" default="true"&gt;None&lt;/option&gt;
        &lt;option id="tabs" minApi="11"&gt;Tabs&lt;/option&gt;
        &lt;option id="pager" minApi="11"&gt;Swipe Views&lt;/option&gt;
        &lt;option id="dropdown" minApi="11"&gt;Dropdown&lt;/option&gt;
    &lt;/parameter&gt;

    &lt;!-- 512x512 PNG thumbnails. --&gt;
    &lt;thumbs&gt;
        &lt;!-- Default thumbnail. --&gt;
        &lt;thumb&gt;template_default.png&lt;/thumb&gt;
        &lt;!-- Attributes act as selectors based on chosen parameters. --&gt;
        &lt;thumb navType="tabs"&gt;template_tabs.png&lt;/thumb&gt;
        &lt;thumb navType="dropdown"&gt;template_dropdown.png&lt;/thumb&gt;
    &lt;/thumbs&gt;

    &lt;!-- Optional global variables. --&gt;
    &lt;globals file="globals.xml.ftl" /&gt;

    &lt;!-- Required recipe (script) to run when instantiating
         the template. --&gt;
    &lt;execute file="recipe.xml.ftl" /&gt;
&lt;/template&gt;
</pre>

<p>Below is a listing of supported tags in <code>template.xml</code>.</p>

<h4 class="includetoc">&lt;template&gt;</h4>

<p>The template root element.</p>

<dl>
  <dt><code>format</code></dt>
  <dd>The template format version that this template adheres to. Should be <code>3</code>.</dd>

  <dt><code>revision</code></dt>
  <dd>Optional. The version of this template (which you can increment when updating the template), as an integer.</dd>

  <dt><code>name</code></dt>
  <dd>The template's display name.</dd>

  <dt><code>description</code></dt>
  <dd>The template's description.</dd>

  <dt><code>minApi</code></dt>
  <dd>Optional. The minimum API level required for this template. The IDE will ensure that the target project has a <code>minSdkVersion</code> no lower than this value before instantiating the template.</dd>

  <dt><code>minBuildApi</code></dt>
  <dd>Optional. The minimum build target (expressed as an API level) required for this template. The IDE will ensure that the target project is targeting an API level greater than or equal to this value before instantiating the template. This ensures that the template can safely use newer APIs (optionally guarded by runtime API level checks) without introducing compile-time errors into the target project.</dd>
</dl>

<h4 class="includetoc">&lt;dependency&gt;</h4>

<p>Indicates that the template requires that a given library be present in the target project. If not present, the IDE will add the dependency to the project.</p>

<dl>
  <dt><code>name</code></dt>
  <dd>The name of the library. Currently accepted values are:<ul>
    <li><code>android-support-v4</code></li>
    <li><code>android-support-v13</code></li>
  </ul></dd>

  <dt><code>revision</code></dt>
  <dd>The minimum revision of the library required by this template.</dd>
</dl>

<h4 class="includetoc">&lt;category&gt;</h4>

<p>The template type. This element is optional.</p>

<dl>
  <dt><code>value</code></dt>
  <dd>The template type. Should be one of the following values: <ul>
    <li><code>Applications</code></li>
    <li><code>Activities</code></li>
    <li><code>UI Components</code></li>
  </ul></dd>
</dl>

<h4 class="includetoc">&lt;parameter&gt;</h4>

<p>Defines a user-customizable template parameter.</p>

<dl>
  <dt><code>id</code></dt>
  <dd>The identifier representing this variable, made available as a global variable in FreeMarker files. If the identifier is <code>foo</code>, the parameter value will be available in FreeMarker files as <code>${foo}</code>.</dd>

  <dt><code>name</code></dt>
  <dd>The display name of the template parameter.</dd>

  <dt><code>type</code></dt>
  <dd>The data type of the parameter. Either <code>string</code>, <code>boolean</code>, <code>enum</code>, or <code>separator</code>.</dd>

  <dt><code>constraints</code></dt>
  <dd>Optional. Constraints to impose on the parameter's value. Constraints can be combined using <code>|</code>. Valid constraint types are: <ul>
    <li><code>nonempty</code> &mdash; the value must not be empty</li>
    <li><code>apilevel</code> &mdash; the value should represent a numeric API level</li>
    <li><code>package</code> &mdash; the value should represent a valid Java package name</li>
    <li><code>class</code> &mdash; the value should represent a valid Java class name</li>
    <li><code>activity</code> &mdash; the value should represent a fully-qualified activity class name</li>
    <li><code>layout</code> &mdash; the value should represent a valid layout resource name</li>
    <li><code>drawable</code> &mdash; the value should represent a valid drawable resource name</li>
    <li><code>string</code> &mdash; the value should represent a valid string resource name</li>
    <li><code>id</code> &mdash; the value should represent a valid id resource name</li>
    <li><code>unique</code> &mdash; the value must be unique; this constraint only makes sense when other constraints are specified, such as <code>layout</code>, which would mean that the value should not represent an existing layout resource name</li>
    <li><code>exists</code> &mdash; the value must already exist; this constraint only makes sense when other constraints are specified, such as <code>layout</code>, which would mean that the value should represent an existing layout resource name</li>
  </ul></dd>

  <dt><code>suggest</code></dt>
  <dd>Optional. A FreeMarker expression representing the auto-suggested parameter value (a 'dynamic default'). When the user modifies other parameter values, and if this parameter's value has not been changed from its default, then the value changes to the result of this expression. This may seem to be circular since parameters can <code>suggest</code> against each other's values, but these expressions are only updated for non-edited values, so this approach lets the user edit either parameter value, and the other will automatically be updated to a reasonable default.</dd>

  <dt><code>default</code></dt>
  <dd>Optional. The default value for this parameter.</dd>

  <dt><code>help</code></dt>
  <dd>The help string to display to the user for this parameter.</dd>

</dl>

<h4 class="includetoc">&lt;option&gt;</h4>

<p>For parameters of type <code>enum</code>, represents a choice for the value.</p>

<dl>
  <dt><code>id</code></dt>
  <dd>The parameter value to set if this option is chosen.</dd>

  <dt><code>minApi</code></dt>
  <dd>Optional. The minimum API level required if this option is chosen. The IDE will ensure that the target project has a <code>minSdkVersion</code> no lower than this value before instantiating the template.</dd>

  <dt><code>[text]</code></dt>
  <dd>The text content of this element represents the display value of the choice.</dd>
</dl>

<h4 class="includetoc">&lt;thumb&gt;</h4>

<p>Represents a thumbnail for the template. <code>&lt;thumb&gt;</code> elements should be contained inside a <code>&lt;thumbs&gt;</code> element. The text contents of this element represent the path to the thumbnail. If this element has any attributes, they will be treated as selectors for parameter values. For example, if there are two thumbnails:</p>

<pre class="prettyprint lang-xml">
&lt;thumbs&gt;
  &lt;thumb&gt;template.png&lt;/thumb&gt;
  &lt;thumb navType="tabs"&gt;template_tabs.png&lt;/thumb&gt;
&lt;/thumbs&gt;
</pre>

<p>The template 'preview' thumbnail will show <code>template_tabs.png</code> if the value of the <code>navType</code> template parameter is <code>tabs</code> and <code>template.png</code> otherwise.</p>

<h3>globals.xml.ftl</h3>

<p>The optional globals XML file contains global variable definitions, for use in all FreeMarker processing jobs for this template.</p>

<p>An example <code>globals.xml.ftl</code> is shown below.</p>

<pre class="prettyprint lang-xml">
&lt;globals&gt;
    &lt;global id="srcOut"
            value="src/${slashedPackageName(packageName)}" /&gt;
    &lt;global id="activityNameLower"
            value="${activityName?lower_case}" /&gt;
    &lt;global id="activityClass"
            value="${activityName}Activity" /&gt;
&lt;/globals&gt;
</pre>

<h3>recipe.xml.ftl</h3>

<p>The recipe XML file contains the individual instructions that should be executed when generating code from this template. For example, you can copy certain files or directories (the copy instruction), optionally running the source files through FreeMarker (the instantiate instruction), and ask ADT to open a file in Eclipse after the code has been generated (the open instruction).</p>

<p class="note"><strong>Note:</strong> The name of the recipe file is up to you, and is defined in <code>template.xml</code>. By convention, however, it's best to call it <code>recipe.xml.ftl</code>.</p>

<p class="note"><strong>Note:</strong> The global variables in <code>globals.xml.ftl</code> are available for use in <code>recipe.xml.ftl</code>.</p>

<p>An example <code>recipe.xml.ftl</code> is shown below.</p>

<pre class="prettyprint lang-xml">
&lt;recipe&gt;
    &lt;!-- runs FreeMarker, then copies from
         [template-directory]/root/ to [output-directory]. --&gt;
    &lt;instantiate from="AndroidManifest.xml.ftl" /&gt;

    &lt;!-- automatically creates directories as needed --&gt;
    &lt;copy from="res/drawable-hdpi" /&gt;
    &lt;copy from="res/drawable-mdpi" /&gt;
    &lt;copy from="res/drawable-xhdpi" /&gt;
    &lt;copy from="res/values/dimens.xml" /&gt;
    &lt;copy from="res/values/styles.xml" /&gt;
    &lt;copy from="res/values-large/dimens.xml" /&gt;

    &lt;copy from="res/menu/main.xml"
            to="res/menu/${activityNameLower}.xml" /&gt;

    &lt;instantiate from="res/values/strings.xml.ftl" /&gt;

    &lt;!-- Decide which layout to add --&gt;
    &lt;#if navType?contains("pager")&gt;
        &lt;instantiate
            from="res/layout/activity_pager.xml.ftl"
              to="res/layout/activity_${activityNameLower}.xml" /&gt;
    &lt;#elseif navType == "tabs" || navType == "dropdown"&gt;
        &lt;copy from="res/layout/activity_fragment_container.xml"
                to="res/layout/activity_${activityNameLower}.xml" /&gt;
    &lt;#else&gt;
        &lt;copy from="res/layout/activity_simple.xml"
                to="res/layout/activity_${activityNameLower}.xml" /&gt;
    &lt;/#if&gt;

    &lt;!-- Decide which activity code to add --&gt;
    &lt;#if navType == "none"&gt;
        &lt;instantiate from="src/app_package/SimpleActivity.java.ftl"
                       to="${srcOut}/${activityClass}.java" /&gt;
    &lt;#elseif navType == "pager"&gt;
        &lt;instantiate from="src/app_package/PagerActivity.java.ftl"
                       to="${srcOut}/${activityClass}.java" /&gt;
    &lt;#elseif navType == "tabs"&gt;
        &lt;instantiate from="src/app_package/TabsActivity.java.ftl"
                       to="${srcOut}/${activityClass}.java" /&gt;
    &lt;#elseif navType == "dropdown"&gt;
        &lt;instantiate from="src/app_package/DropdownActivity.java.ftl"
                       to="${srcOut}/${activityClass}.java" /&gt;
    &lt;/#if&gt;

    &lt;!-- open the layout file when done --&gt;
    &lt;open file="res/layout/${activityNameLower}.xml" /&gt;
&lt;/recipe&gt;
</pre>

<p>The instructions below are supported:</p>

<h4 class="includetoc">&lt;copy&gt;</h4>

<p>The only required argument is <code>from</code> which specifies the location of the source files to copy under the <code>root/</code> directory. All necessary ancestor directories are automatically created if needed.</p>

<p>The default destination location is the same path under the output directory root (i.e. the location of the destination project). If the optional <code>to</code> argument is provided, this specifies the output directory. Note that if the from path ends with <code>.ftl</code>, it will automatically be stripped. For example <code>&lt;instantiate from="res/values/strings.xml.ftl" /&gt;</code> is adequate; this will create a file named <code>strings.xml</code>, not <code>strings.xml.ftl</code>.</p>

<p>This argument works recursively, so if <code>from</code> is a directory, that directory is recursively copied.</p>

<h4 class="includetoc">&lt;instantiate&gt;</h4>

<p>Same as <code>&lt;copy&gt;</code>, but each source file is first run through FreeMarker.</p>

<h4 class="includetoc">&lt;merge&gt;</h4>

<p>This instruction will be used to merge the contents of a source file into an existing file in the project. The most common use case for this will be to add components to the <code>AndroidManifest.xml</code> file of the destination project, or to merge resources such as strings into an existing <code>strings.xml</code> file.</p>

<h4 class="includetoc">&lt;open&gt;</h4>

<p>Instruct ADT to open the file created by the specified <code>file</code> argument in Eclipse after code generation is complete.</p>

<h3>root/</h3>

<p>The actual template files (resources, Java sources, Android Manifest changes) should be placed in the <code>root/</code> directory, in a directory structure that roughly resembles what the output directory structure should look like.</p>

<p>One difference is that instead of placing source files in <code>src/com/google/...</code> you can just use a naming convention like <code>src/app_package/</code> to indicate that files under this directory will be placed in the destination project's source file package root.</p>




<h2>Extra Template Functions</h2>

<p>Several functions are available to FreeMarker expressions and files beyond the standard set of built-in FreeMarker functions. These are listed below.</p>

<h3 data-toctitle="activityToLayout">string <em>activityToLayout</em>(string)</h3>

<p>This function converts an activity class-like identifer string, such as <code>FooActivity</code>, to a corresponding resource-friendly identifier string, such as <code>activity_foo</code>.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>activityClass</code></dt>
  <dd>The activity class name, e.g. <code>FooActivity</code> to reformat.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_layouttoactivity"><code>layoutToActivity</code></a></p>

<h3 data-toctitle="camelCaseToUnderscore">string <em>camelCaseToUnderscore</em>(string)</h3>

<p>This function converts a camel-case identifer string, such as <code>FooBar</code>, to its corresponding underscore-separated identifier string, such as <code>foo_bar</code>.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>camelStr</code></dt>
  <dd>The camel-case string, e.g. <code>FooBar</code> to convert to an underscore-delimited string.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_underscoretocamelcase"><code>underscoreToCamelCase</code></a></p>

<h3 data-toctitle="escapeXmlAttribute">string <em>escapeXmlAttribute</em>(string)</h3>

<p>This function escapes a string, such as <code>Android's</code> such that it can be used as an XML attribute value: <code>Android&amp;apos;s</code>. In particular, it will escape ', ", &lt; and &amp;.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>str</code></dt>
  <dd>The string to be escaped.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_escapexmltext"><code>escapeXmlText</code></a></p>
<p><a href="#toc_escapexmlstring"><code>escapeXmlString</code></a></p>

<h3 data-toctitle="escapeXmlText">string <em>escapeXmlText</em>(string)</h3>

<p>This function escapes a string, such as <code>A &amp; B's</code> such that it can be used as XML text. This means it will escape &lt; and &gt;, but unlike <a href="#toc_escapexmlattribute"><code>escapeXmlAttribute</code></a> it will <b>not</b> escape ' and ". In the preceeding example, it will escape the string to <code>A &amp;amp; B\s</code>. Note that if you plan to use the XML text as the value for a &lt;string&gt; resource value, you should consider using <a href="#toc_escapexmlstring"><code>escapeXmlString</code></a> instead, since it performs additional escapes necessary for string resources.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>str</code></dt>
  <dd>The string to escape to proper XML text.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_escapexmlattribute"><code>escapeXmlAttribute</code></a></p>
<p><a href="#toc_escapexmlstring"><code>escapeXmlString</code></a></p>

<h3 data-toctitle="escapeXmlString">string <em>escapeXmlString</em>(string)</h3>

<p>This function escapes a string, such as <code>A &amp; B's</code> such that it is suitable to be inserted in a string resource file as XML text, such as <code>A &amp;amp; B\s</code>. In addition to escaping XML characters like &lt; and &amp;, it also performs additional Android specific escapes, such as escaping apostrophes with a backslash, and so on.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>str</code></dt>
  <dd>The string, e.g. <code>Activity's Title</code> to escape to a proper resource XML value.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_escapexmlattribute"><code>escapeXmlAttribute</code></a></p>
<p><a href="#toc_escapexmltext"><code>escapeXmlText</code></a></p>

<h3 data-toctitle="extractLetters">string <em>extractLetters</em>(string)</h3>

<p>This function extracts all the letters from a string, effectively removing any punctuation and whitespace characters.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>str</code></dt>
  <dd>The string to extract letters from</dd>
</dl>

<h3 data-toctitle="classToResource">string <em>classToResource</em>(string)</h3>

<p>This function converts an Android class name, such as <code>FooActivity</code> or <code>FooFragment</code>, to a corresponding resource-friendly identifier string, such as <code>foo</code>, stripping the 'Activity' or 'Fragment' suffix. Currently stripped suffixes are listed below.</p>

<ul>
  <li>Activity</li>
  <li>Fragment</li>
  <li>Provider</li>
  <li>Service</li>
</ul>

<h4>Arguments</h4>
<dl>
  <dt><code>className</code></dt>
  <dd>The class name, e.g. <code>FooActivity</code> to reformat as an underscore-delimited string with suffixes removed.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_activitytolayout"><code>activityToLayout</code></a></p>

<h3 data-toctitle="layoutToActivity">string <em>layoutToActivity</em>(string)</h3>

<p>This function converts a resource-friendly identifer string, such as <code>activity_foo</code>, to a corresponding Java class-friendly identifier string, such as <code>FooActivity</code>.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>resourceName</code></dt>
  <dd>The resource name, e.g. <code>activity_foo</code> to reformat.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_activitytolayout"><code>activityToLayout</code></a></p>

<h3 data-toctitle="slashedPackageName">string <em>slashedPackageName</em>(string)</h3>

<p>This function converts a full Java package name to its corresponding directory path. For example, if the given argument is <code>com.example.foo</code>, the return value will be <code>com/example/foo</code>.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>packageName</code></dt>
  <dd>The package name to reformat, e.g. <code>com.example.foo</code>.</dd>
</dl>

<h3 data-toctitle="underscoreToCamelCase">string <em>underscoreToCamelCase</em>(string)</h3>

<p>This function converts an underscore-delimited string, such as <code>foo_bar</code>, to its corresponding camel-case string, such as <code>FooBar</code>.</p>

<h4>Arguments</h4>
<dl>
  <dt><code>underStr</code></dt>
  <dd>The underscore-delimited string, e.g. <code>foo_bar</code> to convert to a camel-case string.</dd>
</dl>

<h4>See also</h4>
<p><a href="#toc_camelcasetounderscore"><code>camelCaseToUnderscore</code></a></p>

<h2>Notes for Template Authors</h2>

<h3>Tools metadata</h3>

<p>When creating activity layouts, make sure to include the activity name in the root view in the layout as part of the <code>tools</code> namespace, as shown in the following example:</p>

<pre class="prettyprint lang-xml">
&lt;TextView xmlns:android="http://schemas.android.com/apk/res/android"
    <strong>xmlns:tools="http://schemas.android.com/tools"</strong>
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:text="@string/hello_world"
    android:padding="@dimen/padding_medium"
    <strong>tools:context=".${activityClass}"</strong> /&gt;
</pre>

<p>As of ADT 20 we use this attribute in layouts to maintain a mapping to the active activity to use for a layout. (Yes, there can be more than one, but this attribute is showing the activity context you want to edit the layout as. For example, it will be used to look up a theme registration (which is per-activity rather than per-layout) in the manifest file, and we will use this for other features in the future&mdash;for example to preview the action bar, which also requires us to know the activity context.</p>

</div>

</body>
</html>
