概要:看了一个这样的教程,记录学习一下。如果有人看到这个博客希望对大家有所帮助
具体的效果图:
分析:从上图中可以看到,我新建一个项目的时候以及新建一个activity的时候会显示一个新安装的androidstudio没有的activity模板,这个模板可以加入自己平时开发中所需的但是赖得写的,在新建activity的时候会自动生成的代码。
我这里写一个简单的欢迎页,每个app都有欢迎页并且写的套路都一样。
第一步:
我们去找到目录C:\Program Files\Android\Android Studio\plugins\android\lib\templates\activities 如图:
这个图上面的都是androidstudio原来就有的activity,我们可以copy一份LoginActivity,然后在此基础上改
目录结构如下:
第二步:
这个图上面的都是androidstudio原来就有的activity,我们可以copy一份,然后在此基础上改
①先修改template.xml,这个文件是新建activity的时候的选择页面
<?xml version="1.0"?>
<template
format="5"
revision="6"
name="Welcome Activity"
description="Creates a new welcome activity"
minApi="8"
minBuildApi="14">
<dependency name="android-support-v4" revision="8" />
<category value="Activity" />
<formfactor value="Mobile" />
<parameter
id="instantAppActivityHost"
name="Instant App URL Host"
type="string"
suggest="${companyDomain}"
default="instantapp.example.com"
visibility="isInstantApp!false"
help="The domain to use in the Instant App route for this activity"/>
<parameter
id="instantAppActivityRouteType"
name="Instant App URL Route Type"
type="enum"
default="pathPattern"
visibility="isInstantApp!false"
help="The type of route to use in the Instant App route for this activity" >
<option id="path">Path</option>
<option id="pathPrefix">Path Prefix</option>
<option id="pathPattern">Path Pattern</option>
</parameter>
<parameter
id="instantAppActivityRoute"
name="Instant App URL Route"
type="string"
default="/.*"
visibility="isInstantApp!false"
help="The route to use in the Instant App route for this activity"/>
//要创建的Activity的名称,选择框的时候可以修改
<parameter
id="activityClass"
name="Activity Name"
type="string"
constraints="class|unique|nonempty"
default="WelcomeActivity"
help="The name of the activity class to create" />
//创建的时候判断你是否勾选generateLayout的选项
<parameterid="generateLayout"
name="Generate Layout File"
type="boolean"
default="true"
help="If true, a layout file will be generated" />
//要创建的布局文件的名称,选择框的时候可以修改
<parameter
id="layoutName"
name="Layout Name"
type="string"
constraints="layout|unique|nonempty"
suggest="${activityToLayout(activityClass)}"
default="activity_welcome"
help="The name of the layout to create for the activity" />
<parameter
id="activityTitle"
name="Title"
type="string"
constraints="nonempty"
default="Sign in"
help="The name of the activity." />
<parameter
id="parentActivityClass"
name="Hierarchical Parent"
type="string"
constraints="activity|exists|empty"
default=""
help="The hierarchical parent activity, used to provide a default implementation for the 'Up' button" />
//要创建的包的名称,选择框的时候可以修改
<parameter
id="packageName"
name="Package name"
type="string"
constraints="package"
default="com.mycompany.myapp" />
<thumbs>
<thumb>template_login_activity.png</thumb>
</thumbs>
<globals file="globals.xml.ftl" />
<execute file="recipe.xml.ftl" />
</template>
②再修改recipe.xml.ftl,这个文件是引入activity文件,布局文件以及注册文件的关键,不能改错。而引入的文件接下来也要修改
<?xml version="1.0"?>
<#import "root://activities/common/kotlin_macros.ftl" as kt>
<recipe>
<#if appCompat && !(hasDependency('com.android.support:appcompat-v7'))>
<dependency mavenUrl="com.android.support:appcompat-v7:${buildApi}.+" />
</#if>
<#if (buildApi gte 22) && appCompat && !(hasDependency('com.android.support:design'))>
<dependency mavenUrl="com.android.support:design:${buildApi}.+" />
</#if>
<#if !appCompat && (includePermissionCheck!false)>
<dependency mavenUrl="com.android.support:support-annotations:${buildApi}.+" />
</#if>
<#include "../common/recipe_theme.xml.ftl" />
<merge from="root/AndroidManifest.xml.ftl"
to="${escapeXmlAttribute(manifestOut)}/AndroidManifest.xml" />
<instantiate from="root/res/layout/activity_welcome.xml.ftl"
to="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
<#if generateKotlin>
<@kt.addAllKotlinDependencies />
<instantiate from="root/src/app_package/WelcomeActivity.kt.ftl"
to="${escapeXmlAttribute(srcOut)}/${activityClass}.kt" />
<open file="${escapeXmlAttribute(srcOut)}/${activityClass}.kt" />
<#else>
<instantiate from="root/src/app_package/WelcomeActivity.java.ftl"
to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
<open file="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
</#if>
</recipe>
③修改
C:\Program Files\Android\Android Studio\plugins\android\lib\templates\activities\WelcomeActivity\root\res\layout
目录下面的布局文件,成为你需要的创建activity的通用文件,注意文件名字要改成你前面引用的名字相同,这里是:
activity_welcome.xml.ftl
具体:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
我这里是欢迎页,所以只需要一个图片就行了
④修改
C:\Program Files\Android\Android Studio\plugins\android\lib\templates\activities\WelcomeActivity\root
下的注册文件,和之前一样名字改成:AndroidManifest.xml.ftl
<#import "../../common/shared_manifest_macros.ftl" as manifestMacros><manifest xmlns:android="http://schemas.android.com/apk/res/android" >
<application>
<activity android:name=".${activityClass}"
android:theme="@style/Theme.AppCompat.NoActionBar"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这个文件按照你的想法去改
⑤修改
C:\ProgramFiles\Android\AndroidStudio\plugins\android\lib\templates\activities\WelcomeActivity\root\src\app_package
目录下的两个文件,这两个文件可以修改一个,然后去复制一份到另外一个文件就行,也就是内容一样,文件名字改成
WelcomeActivity.java.ftl和WelcomeActivity.kt.ftl
package ${packageName};
import ${superClassFqcn};
import android.os.Bundle;
import android.os.Handler;
import android.content.Intent;
import android.view.Window;
import android.view.WindowManager;
public class ${activityClass} extends ${superClass} {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//这步很关键,这里的意思就是创建的时候勾选了generateLayout这个选项就会生成布局文件,如果不勾选就没有
<#if generateLayout>setContentView(R.layout.${layoutName});
</#if>
//for a moment to start a activity
Handler handler=new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run(){
//start a new activity
Intent intent=new Intent(${activityClass}.this,$NewActivity.class);
startActivity(intent);
finish();
}
},WAIT_TIME);
}
}
⑥这样就大功告成了,新建项目或者新建一个activity的时候就是出现WelcomeActivity的模板,整体很简单,但结合自己的项目
中去,将自己创建activity所通用的代码写到模板中,这样可以节省很多的时间
代码的网址:https://download.csdn.net/download/qq_21451739/10494793