内容简介:前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 them、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。解决方案也很简单,就是利用AS自带的
引言
前面我们在封装Toolbar的时候,使用的是在xml中修改style,其实这种做法在适配会有一点问题,那就是每次我们新建Activity的时候都需要手动的更改 them、style,这比较繁琐、也没什么意义,所以下章我们就着手解决这个问题。
正文
解决方案
解决方案也很简单,就是利用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
图中的标注出来的地方是manifest和layout.xml的引用,这部分是放在common下面的,是全局配置,我们不好修改, 最好是将这两个文件复制到我们的模板中来,然后修改一下include:
修改manifest
可以看到图中的的指向地址仍是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进来,等做完了再删除无用的文件。
把common下的文件全部copy进来
把common下的文件全部copy进来
把common下的文件全部copy进来
重要的事情讲三次。
根据 recipe_app_bar.xml.ftl
的指引,需要修改 root/res/layout/app_bar.xml.ftl
==这个文件。
好了,我们对其中的内容进行更改吧。
<?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是描述输入面板的,这里我们需要修改以下几项,其它暂时默认:
修改之后:
... <template format="5" revision="6" name="CandyBaseActivity" minApi="9" minBuildApi="14" description="This is my CandyBaseActivity"> ...
将模板放入activities
将模板放入到相应的位置,然后重启AS。
重启完成,创建:new->activity>CandyBaseActivity。如下:
填写相关信息,点击Finish。
图片有点大,需要等待的时间比较长。
运行起来看看吧:
完美达成,虽然其中有些许的坑,但还是填完了。
结束
总结
写这个模板最重要的是心态,一定要淡定,因为以前的老版本会提示是哪个模板文件出错,但是3.14这个版本没有错误位置的提示,只有一大堆的异常,只能慢慢的找了,但是只要作出一个模板,那后面的就会简单很多。
不想折腾的也可以直接用我的模板,我会将其尽量精简。
软广
来都来了,就给个关注吧,时不时会悄悄的推送一些小技巧的文章~~!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 工具集核心教程 | 第五篇: 利用Velocity模板引擎生成模板代码
- Java 通用代码生成器光 2.2.0 智慧版本尝鲜版公布,新增模板向导,代码界面和模板生成完美支持
- 60行代码实现简单模板语法
- PyCharm 自定义文件和代码模板
- 500行 python 代码实现模板引擎
- MoliCode 2.0 发布,自定义模板代码生成
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
SHA 加密
SHA 加密工具
RGB HSV 转换
RGB HSV 互转工具