ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Studio自定义activity模板,apk体积优化

2022-01-14 12:29:59  阅读:165  来源: 互联网

标签:xml name 自定义 activity apk Studio Activity ftl 模板


上图的效果就是android studio的模板,我们可以通过自定义模板方便我们日常的开发。

开始

============================================================

首先从android studio自带的模板说起

在android studio的安装目录下的\plugins\android\lib\templates\activities下保存了android studio系统自带的activity模板 截图如下:

通过模板可以快速的开发,但是由于我们UI大大的需求不会简单到使用系统自带的模板就可以完成的。

我们从最简单的Empty Activity开始分析,先看目录结构

![](https://www.icode9.com/i/ll/?i=20181127170907632.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2w1MDY5NDUwMjQ=,si
ze_16,color_FFFFFF,t_70)

root 文件夹 资源文件、模板文件

globals.xml.ftl 提供参数

recipe.xml.ftl 生成实际所需代码、资源文件等,使用参数替换其中的变量

template parameter标签,提供参数(图形化)

template_blank_activity 实际模板照片

平常我们自定义模板通常是复制已有的模板出来,然后在上面修改在

1.template.xml 属性详解


<?xml version="1.0"?>

<template

format=“5”

revision=“5”

name=“Empty Activity”

minApi=“9”

minBuildApi=“14”

description=“Creates a new empty activity”>

<parameter

id=“activityClass”

name=“Activity Name”

type=“string”

constraints=“class|unique|nonempty”

suggest="${layoutToActivity(layoutName)}"

default=“MainActivity”

help=“The name of the activity class to create” />

template_blank_activity.png

  • <template> 中的 name 属性,对应新建 Activity 时显示的名字

  • <category> 对应New的类别为Activity 上面parameter标签中部分属性如下:

  • id :唯一标识,最终通过该属性的值,获取用户输入值(文本框内容,是否选中)

  • name:界面上的类似label的提示语

  • type : 输入值类型

  • constraints:填写值的约束

  • suggest:建议值,比如填写ActivityName的时候,会给出一个布局文件的建议值。

  • default:默认值

  • help:底部显示的提升语 对应的android studio操作的图形化界面(上面代码有删减)

2.打开globals.xml.flt


<?xml version="1.0"?>

<#include “…/common/common_globals.xml.ftl” />

globals存储的是一些全局变量

3.recipe.xml.ftl


<?xml version="1.0"?>

<#import “root://activities/common/kotlin_macros.ftl” as kt>

<#include “…/common/recipe_manifest.xml.ftl” />

<@kt.addAllKotlinDependencies />

<#if generateLayout>

<#include “…/common/recipe_simple.xml.ftl” />

</#if>

<instantiate from=“root/src/app_package/SimpleActivity.${ktOrJavaExt}.ftl”

to=" e s c a p e X m l A t t r i b u t e ( s r c O u t ) / {escapeXmlAttribute(srcOut)}/ escapeXmlAttribute(srcOut)/{activityClass}.${ktOrJavaExt}" />

常用标签及其含义:

  • copy :从root中copy文件到我们的目标目录,比如我们的模板Activity需要使用一些图标,那么可能就需要使用copy标签将这些图标拷贝到我们的项目对应文件夹。

  • merge : 合并的意思,比如将我们使用到的strings.xml合并到我们的项目的stirngs.xml中

  • instantiate : 和copy类似,但是可以看到上例试将ftl->java文件的,也就是说中间会通过一个步骤,将ftl中的变量都换成对应的值,那么完整的流程是 ftl->freemarker process -> java

  • open:在代码生成后,打开指定的文件,比如我们新建一个Activity后,默认就会将该Activity打开。

freemaker简单语法:

if 指令


//当价格为0时,就会打印出 “Pythons are free today!”:

<#if animals.python.price != 0>

Pythons are not free today!

</#if>

<#if >

<#elseif >

<#else >

</#if >

<#if animals.python.price < animals.elephant.price>

Pythons are cheaper than elephants today.

<#elseif animals.elephant.price < animals.python.price>

Elephants are cheaper than pythons today.

<#else>

Elephants and pythons cost the same today.

</#if>

include 指令


使用 include 指令, 我们可以在模板中插入其他文件的内容。

示例

============================================================

一.template

<?xml version="1.0"?>

<template

format=“5”

revision=“5”

name=“自定义列表的 Activity”

minApi=“9”

minBuildApi=“14”

description=“创建一个新的列表”>

<parameter

id=“activityClass”

name=“Activity Name”

type=“string”

constraints=“class|unique|nonempty”

suggest="${layoutToActivity(layoutName)}"

default=“MainActivity”

help=“The name of the activity class to create” />

<parameter

id=“isLauncher”

name=“Launcher Activity”

type=“boolean”

default=“false”

help=“If true, this activity will have a CATEGORY_LAUNCHER intent filter, making it visible in the launcher” />

标签:xml,name,自定义,activity,apk,Studio,Activity,ftl,模板
来源: https://blog.csdn.net/m0_66144765/article/details/122491494

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有