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

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

内容简介:前面我们在封装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工程代码模板

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

查看所有标签

猜你喜欢:

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

顾客要买什么

顾客要买什么

[美]迈克尔·西尔 / 方海萍 / 中国人民大学出版社 / 2006-10 / 38.00元

《顾客要买什么》告诉我们全球的中产阶级如何正在改造着消费品市场:对低价的产品和服务进行趋低消费,对于高端的产品和服务要趋优消费,而对于日趋乏味、价值降低的中档商品则避而远之。这些消费者大多是女性,教育程度高,可支配收入多,买东西的时候也更会精打细算。她们选购、使用商品和服务的时候都是有目的的,有一种大权在握的感觉。消费对她们来说并不是非做不可的麻烦事,也不是什么无法避免的琐事,而是如何明智地花钱的......一起来看看 《顾客要买什么》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

RGB CMYK 互转工具