Android 之路 (9) - 第一个AS工程代码模板

栏目: Android · 发布时间: 6年前

内容简介:前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 them、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。解决方案也很简单,就是利用AS自带的

引言

前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 them、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。

正文

解决方案

解决方案也很简单,就是利用AS自带的 工程模板就 能够解决这个问题,也就是下面这个东西:

Android 之路 (9) - 第一个AS工程代码模板

这个我们用得多,但是真正了解的应该不多,其实他就是使用Freemarker编写模板,然后通过替换输出成为源文件。所以我们只需要修改其中的一部分关键代码替换成自己的就行。

注意:在写本文章的时候用的是 AS 3.14(已经适配3.4),每个版本之间会有细微的差别。

开始

模板位置

windows:

AS安装位置/plugins/android/lib/templates/activities

macOS:

/Applications/Android Studio.app/Contents/plugins/android/lib/templates/activities

开始更改

我们以 BasicActivity 为蓝本,复制一份命名为 CandyBaseActivity ,然后使用其他编译器打开,我这里使用的是 atom 。具体工程模板相关的说明请看 AndroidStudio笔记(5)懒人养成的Freemarker代码模板 ,这里就不仔细讲解了。

我们先整理一下我们需要修改的部分,然后再一步一步的完成:

manifest中的theme

Activity中继承CandyBaseActivity,去除FloatActionButton

activity_layout中修改AppBarLayout和Toolbar、去除FloatActionButton

修改include

Android 之路 (9) - 第一个AS工程代码模板

图中的标注出来的地方是manifest和layout.xml的引用,这部分是放在common下面的,是全局配置,我们不好修改, 最好是将这两个文件复制到我们的模板中来,然后修改一下include:

Android 之路 (9) - 第一个AS工程代码模板

修改manifest

Android 之路 (9) - 第一个AS工程代码模板 可以看到图中的的指向地址仍是common文件夹,我们需要将这两个文件拷贝到我们的root文件夹下和values文件夹中。

修改AndroidManifest.xml.ftl,将中间的 theme 修改成我们自己的 AppTheme.ToolbarHeight 。如下:

<#import "../../common/shared_manifest_macros.ftl" as manifestMacros>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

   <application>
           <activity android:name="${packageName}.${activityClass}"
                     android:label="@string/title_${activityToLayout(activityClass)}"
                     android:theme="@style/AppTheme.ToolbarHeight"/>
       </application>
</manifest>

修改SimpleActivity.java.ftl

我们暂时只做 Java 版本的,对于kotlin先暂时不适配。

去除其中不需要的部分,然后修改继承关系,顺便加一点注释。

package ${packageName};

import android.os.Bundle;
import android.view.View;
import com.td.framework.base.activity.CandyBaseActivity;
<#if applicationPackage??>
import ${applicationPackage}.R;
</#if>
/**
 * Created on ${.now}
 * @author: aohanyao
 * @version:1.0
 */
public class ${activityClass} extends CandyBaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.${layoutName});
    }
}

修改activity_layout

又是一大堆指向common,不如直接把common下的文件全部copy进来,等做完了再删除无用的文件。

Android 之路 (9) - 第一个AS工程代码模板

把common下的文件全部copy进来

把common下的文件全部copy进来

把common下的文件全部copy进来

重要的事情讲三次。

根据 recipe_app_bar.xml.ftl 的指引,需要修改 root/res/layout/app_bar.xml.ftl ==这个文件。

Android 之路 (9) - 第一个AS工程代码模板

好了,我们对其中的内容进行更改吧。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${packageName}.${activityClass}">

    <android.support.design.widget.AppBarLayout style="@style/BaseAppBarLayoutStyle">

           <android.support.v7.widget.Toolbar
               style="@style/BaseToolbarStyle"
               app:popupTheme="@style/AppTheme.PopupOverlay">

               <TextView
                   style="@style/ToolBarNavTextStyle"
                   android:text="@string/nav_call_back" />

               <TextView
                   style="@style/ToolBarTitleStyle"
                   android:text="@string/title_${activityToLayout(activityClass)}" />
           </android.support.v7.widget.Toolbar>

       </android.support.design.widget.AppBarLayout>

    <include layout="@layout/${simpleLayoutName}"/>

</android.support.design.widget.CoordinatorLayout>

关于string,我们直接 AndroidManifest.xml.ftl 中的 label 复制过来就行。

修改 recpie

将模板中的<recipe folder=“ root://activities/common ”> 修改为<recipe folder=“ root://activities/CandyBaseActivity ”> ,否则不会生效,还是指向的common

manifest_strings.xml.ftl

现在需要修改 root/res/values/manifest_strings.xml.ftl ,先看看内容:

<resources>
<#if !isNewProject && (generateActivityTitle!true)>
    <string name="title_${activityToLayout(activityClass)}">${escapeXmlString(activityTitle)}</string>
</#if>
</resources>

他这里的做法是通过escapeXmlString方法将activityTitle进行转换

修改template.xml

template.xml是描述输入面板的,这里我们需要修改以下几项,其它暂时默认:

Android 之路 (9) - 第一个AS工程代码模板

修改之后:

...
<template
        format="5"
        revision="6"
        name="CandyBaseActivity"
        minApi="9"
        minBuildApi="14"
        description="This is my CandyBaseActivity">
...

将模板放入activities

将模板放入到相应的位置,然后重启AS。

重启完成,创建:new->activity>CandyBaseActivity。如下:

Android 之路 (9) - 第一个AS工程代码模板

填写相关信息,点击Finish。

图片有点大,需要等待的时间比较长。

Android 之路 (9) - 第一个AS工程代码模板

运行起来看看吧:

Android 之路 (9) - 第一个AS工程代码模板

完美达成,虽然其中有些许的坑,但还是填完了。

结束

总结

写这个模板最重要的是心态,一定要淡定,因为以前的老版本会提示是哪个模板文件出错,但是3.14这个版本没有错误位置的提示,只有一大堆的异常,只能慢慢的找了,但是只要作出一个模板,那后面的就会简单很多。

不想折腾的也可以直接用我的模板,我会将其尽量精简。

模板源码

软广

来都来了,就给个关注吧,时不时会悄悄的推送一些小技巧的文章~~!

Android 之路 (9) - 第一个AS工程代码模板

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2011-11-18 / GBP 129.99

Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course wa......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具