2、globals.xml.ftl
一般不用动
3、recipe.xml.ftl
<?xml version="1.0"?><#if appCompat && !(hasDependency(‘com.android.support:appcompat-v7’))>
</#if>
<merge from=“root/AndroidManifest.xml.ftl”
to=“${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml” />
<merge from=“root/res/values/styles.xml.ftl”
to=“${escapeXmlAttribute(resOut)}/values/styles.xml” />
<instantiate from=“root/res/layout/activity_welcome.xml.ftl”
to=“ e s c a p e X m l A t t r i b u t e ( r e s O u t ) / l a y o u t / {escapeXmlAttribute(resOut)}/layout/ escapeXmlAttribute(resOut)/layout/{layoutName}.xml” />
<instantiate from=“root/src/app_package/WelcomeActivity.java.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}.java” />
copy :从root中copy文件到我们的目标目录,比如我们的模板Activity需要使用一些图标,
那么可能就需要使用copy标签将这些图标拷贝到我们的项目对应文件夹。
merge : 合并的意思,比如将我们使用到的strings.xml合并到我们的项目的stirngs.xml中
instantiate : 和copy类似,但是可以看到上例试将ftl->java文件的,也就是说中间会通过一个步骤,
会生成root下面对应的代码,也就是说你待会root下面的Activity写了什么就会生成什么
open:在代码生成后,打开指定的文件,比如我们新建一个Activity后,
默认就会将该Activity打开。
a、合并AndroidManifest
<merge from=“root/AndroidManifest.xml.ftl”
to=“${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml” />
b、合并styles
<merge from=“root/res/values/styles.xml.ftl”
to=“${escapeXmlAttribute(resOut)}/values/styles.xml” />
c、合并dimens
<merge from=“root/res/values/dimens.xml”
to=“${escapeXmlAttribute(resOut)}/values/dimens.xml” />
d、合并strings
<merge from=“root/res/values/strings.xml.ftl”
to=“${escapeXmlAttribute(resOut)}/values/strings.xml” />
同时这里引入的activity和xml名称都需要和root中的进行对应,
当然合并的内容也需要对应
- root目录
1、在res中
a、dimens和strings的写法可以参考LoginActivity
b.styles的写法(styles.xml.ftl)
- src中是创建的activity(WelcomeActivity.java.ftl)
package ${packageName};
import ${superClassFqcn};
import android.os.Bundle;
import android.os.Handler;
import android.content.Intent;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import java.lang.ref.WeakReference;
public class ${activityClass} extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.${layoutName});
//for a moment start new activity
MyHandler myHandler = new MyHandler(this);
myHandler.sendEmptyMessageDelayed(0, 3000);
}
private static class MyHandler extends Handler {
private WeakReference mActivity;
public MyHandler(WelcomeActivity mActivity) {
this.mActivity = new WeakReference(mActivity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
WelcomeActivity activity = mActivity.get();
if (activity == null || activity.isFinishing()) {
return;
}
switch (msg.what) {
case 0:
Intent intent= new Intent(activity,MainActivity.class);
activity.startActivity(intent);
activity.finish();
break;
}
}
}
}
package ${packageName};// 包名 用 ${ } 引用
import ${superClassFqcn};
import android.os.Bundle;
public class ${activityClass} extends ${superClass} {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 这个我们大概还记得是一个可以勾选的参数 这里就用了if语法
<#if generateLayout>
setContentView(R.layout.${layoutName});
</#if>
}
}
- AndroidManifest.xml.ftl
<activity android:name=“.${activityClass}”
android:label=“@string/app_name”
android:configChanges=“orientation|keyboardHidden|screenSize”
android:theme=“@style/FullscreenTheme”
<#if buildApi gte 16 && parentActivityClass != “”>android:parentActivityName=“${parentActivityClass}”</#if>>
<#if parentActivityClass != “”>
<meta-data android:name=“android.support.PARENT_ACTIVITY”
android:value=“${parentActivityClass}” />
</#if>
对应不需要的可以自行删除
这时重启as就可以使用我们自己的模板了!
这里所述的方法是在android3.0以下版本适用,这里测试版本为2.3.3
如果需要在androidstudio3.0以上,需要增加对kotlin的支持,(具体可以copy一份写好的模板例如:LoginActivity,对java部分进行上述改动,kotlin如果使用的是kotlin开发,再自行改动!)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
文末
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
/2024/03/13/H4lCoPEF.jpg" />
文末
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家
[外链图片转存中…(img-20l8H0Ln-1713010957231)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!