Android Studio自定義模板 做開發竟然可以如此輕松 后篇

###1.概述


最近有很多人反饋,有些哥們不喜歡看文字性的東西,還有一些哥們根本就不知道我在搞啥子,那么以后我就采用博客加視頻的方式,我們可以選擇看視頻講解:http://pan.baidu.com/s/1i5uh2uD   內涵段子項目資料及源碼地址:https://ke.qq.com/course/193277#tuin=e533cfc   

大家不要被我的演示忽悠了,我手機上面的確有兩個內涵段子的apk,接口也是內涵段子的接口,接口和素材待會在源碼里面發給大家,但是所演示的是我自己寫的。這里主要是講,怎么去自定義我們的Android Studio 模板   如果你到目前還不知道我在哪個碼頭,請先看看這里,**利用自定義模板分分鐘開發一個頁面:**http://blog.csdn.net/z240336124/article/details/53053765

###2.實現


2.1. IDE中模板的文件結構      我們首先來參考一下IDE中自帶的模板文件結構,我們Android Studio 的模板都放在 安裝目錄下\plugins\android\lib\templates\activities   

     上圖都是我工程目錄下的模板,至于效果請看前篇講解,那么在Android Studio中最簡單的activity模板就是:Empty Activity了,我們打開該模板文件,首先對文件結構有個直觀的了解,請看圖:      

那么接下來就對這些文件及里面的語法逐個介紹: 2.1.1. template.xml

<?xml version="1.0"?>
<templateformat="5"revision="5"name="Empty Activity"minApi="7"minBuildApi="14"description="Creates a new empty activity"><category value="Activity" /><formfactor value="Mobile" /><parameterid="activityClass"name="Activity Name"type="string"constraints="class|unique|nonempty"suggest="${layoutToActivity(layoutName)}"default="MainActivity"help="The name of the activity class to create" /><!-- .....此處省略幾行無關緊要代碼...... --><!-- 128x128 thumbnails relative to template.xml --><thumbs><!-- default thumbnail is required --><thumb>template_blank_activity.png</thumb></thumbs><globals file="globals.xml.ftl" /><execute file="recipe.xml.ftl" /></template>復制代碼

這里其實可以不做過多解釋,對著新建模板的樣式看一下大概就可以理解了:

這個都是和 template.xml 對應的基本最多的是我標出來的parapmeter部分,下面來解釋一下每個字段的含義

    id :唯一標識,最終會通過它獲取字符串 是否選中等等name:界面上的左邊的提示語type : 輸入值類型  可以是string int boolean 等等constraints:填寫值的約束  如文件名不能重復等等suggest:建議值,比如填寫ActivityName的時候,會給出一個布局文件的建議值。default:默認值help:顯示的幫助提升語
復制代碼

2.1.2 globals.xml.ftl 這個其實沒什么好看的 就一些id對應的初始值而已:

<globals><global id="hasNoActionBar" type="boolean" value="false" /><global id="parentActivityClass" value="" /><global id="simpleLayoutName" value="${layoutName}" /><global id="excludeMenu" type="boolean" value="true" /><global id="generateActivityTitle" type="boolean" value="false" /><#include "../common/common_globals.xml.ftl" />
</globals>
復制代碼

**2.1.3 ** recipe.xml.ftl

<?xml version="1.0"?>
<recipe><#include "../common/recipe_manifest.xml.ftl" /><#if generateLayout><#include "../common/recipe_simple.xml.ftl" /><open file="${escapeXmlAttribute(resOut)}/layout/${layoutName}.xml" />
</#if><instantiate from="root/src/app_package/SimpleActivity.java.ftl"to="${escapeXmlAttribute(srcOut)}/${activityClass}.java" /><open file="${escapeXmlAttribute(srcOut)}/${activityClass}.java" />
</recipe>
復制代碼

這個需要重點介紹一下了,待會一新建會自動生成什么文件,或是生成什么代碼都是靠它來指定:

  • copy :從root中copy文件到我們的目標目錄,比如我們的模板Activity需要使用一些圖標,那么可能就需要使用copy標簽將這些圖標拷貝到我們的項目對應文件夾。

  • merge : 合并的意思,比如將我們使用到的strings.xml合并到我們的項目的stirngs.xml中

  • instantiate : 和copy類似,但是可以看到上例試將ftl->java文件的,也就是說中間會通過一個步驟,會生成root下面對應的代碼,也就是說你待會root下面的Activity寫了什么就會生成什么

  • open:在代碼生成后,打開指定的文件,比如我們新建一個Activity后,默認就會將該Activity打開。

**2.1.4 ** freemarker語法 我們可以看到這個 <#if generateLayout> ... 這個其實也是一種語法,我們寫過程序基本就知道是什么意思,我們看看 root/src/app_package下面的SimpleActivity.java.ftl就大概知道了:

package ${packageName};// 包名 用 ${ } 引用import ${superClassFqcn};
import android.os.Bundle;public class ${activityClass} extends ${superClass} {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 這個我們大概還記得是一個可以勾選的參數 這里就用了if語法
<#if generateLayout>setContentView(R.layout.${layoutName});
</#if>}
}
復制代碼

3. 小結 那么現在我們就知道IDE的模板結構以及格式了,那么我們就可以自定義了:

  • template.xml:他就是用來指定我們的參數,就是供用戶選擇和自定義
  • globals.xml.ftl : 它就是用來初始化一些參數,比如需不需要ActionBar 等等
  • recipe.xml.ftl : 它就是用來應用我們root文件夾下的資源,哪些需要copy哪些需要合并打開等等
  • root文件夾 存放對應源碼的ftl文件,以及資源文件,待會生成的代碼都會該文件夾下的一樣

3. 開始擼代碼

在這里估計我基本寫不清楚了,這個不是***三言兩語為成功干杯***的事,那么這個自己錄個視頻講解:http://pan.baidu.com/s/1i5uh2uD***視頻中不光講了自定義開發模板還講了一些其他的***。大家也可以自己開始嘗試著去寫了,源碼和素材請在下面下載。

附源碼地址:http://download.csdn.net/detail/z240336124/9674377 內涵段子項目資料及源碼地址:https://ke.qq.com/course/193277#tuin=e533cfc

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. 解決方案&#xff1a; 異步更新&#xff08;建議使用&#xff09;強制進行變更檢測&#xff0c;但是會觸發子組件的變更檢測&#xff0c;再次導致父組件屬性改變Parent.Component.…

leetcode 119. 楊輝三角 II

給定一個非負索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回楊輝三角的第 k 行。 在楊輝三角中&#xff0c;每個數是它左上方和右上方的數的和。 示例: 輸入: 3 輸出: [1,3,3,1] 解題思路 因為楊輝三角的下層由上一層決定&#xff0c;所以只需要保存上一層的元素&#x…

掌握大數據數據分析師嗎?_要掌握您的數據嗎? 這就是為什么您應該關心元數據的原因...

掌握大數據數據分析師嗎?Either you are a data scientist, a data engineer, or someone enthusiastic about data, understanding your data is one thing you don’t want to overlook. We usually regard data as numbers, texts, or images, but data is more than that.…

react 使用 mobx_如何使用React和MobX狀態樹構建基于狀態的路由器

react 使用 mobxby Miles Till由Miles Till 如何使用React和MobX狀態樹構建基于狀態的路由器 (How to build a state-based router using React and MobX State Tree) Introducing mobx-state-tree-routerMobx狀態樹路由器簡介 If you want to skip ahead to the finished ex…

docker在Centos上的安裝

Centos6安裝docker 系統&#xff1a;centos6.5 內核&#xff1a;3.10.107-1(已升級)&#xff0c;docker對RHEL/Centos的最低內核支持是2.6.32-431&#xff0c;epel源的docker版本推薦內核為3.10版本。 內核升級可參考&#xff1a;https://www.jslink.org/linux/centos-kernel-u…

Lambda表達式的前世今生

Lambda 表達式 早在 C# 1.0 時&#xff0c;C#中就引入了委托&#xff08;delegate&#xff09;類型的概念。通過使用這個類型&#xff0c;我們可以將函數作為參數進行傳遞。在某種意義上&#xff0c;委托可理解為一種托管的強類型的函數指針。 通常情況下&#xff0c;使用委托來…

matplotlib柱狀圖、面積圖、直方圖、散點圖、極坐標圖、箱型圖

一、柱狀圖 1.通過obj.plot() 柱狀圖用bar表示&#xff0c;可通過obj.plot(kindbar)或者obj.plot.bar()生成&#xff1b;在柱狀圖中添加參數stackedTrue&#xff0c;會形成堆疊圖。 fig,axes plt.subplots(2,2,figsize(10,6)) s pd.Series(np.random.randint(0,10,15),index …

微信支付商業版 結算周期_了解商業周期

微信支付商業版 結算周期Economics is an inexact science, finance and investing even more so (some would call them art). But if there’s one thing in economics that you can consistently count on over the long run, it’s the tendency of things to mean revert …

leetcode 448. 找到所有數組中消失的數字

給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組&#xff0c;數組中的元素一些出現了兩次&#xff0c;另一些只出現一次。 找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。 您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回…

前端初學者開發學習視頻_初學者學習前端開發的實用指南

前端初學者開發學習視頻by Nikita Rudenko通過尼基塔魯登科(Nikita Rudenko) 初學者學習前端開發的實用指南 (A practical guide to learning front end development for beginners) I started my coding journey in spring 2018, a bit less than one year ago. I earned som…

weblogic啟動失敗案例(root啟動引起的權限問題)

weblogic的一個domain啟動失敗&#xff0c;在日志中有如下信息提示&#xff1a; **************************************************** To start WebLogic Server, use a username and ** password assigned to an admin-level user. For ** server administration, us…

HTTP請求示例

HTTP請求格式當瀏覽器向Web服務器發出請求時&#xff0c;它向服務器傳遞了一個數據塊&#xff0c;也就是請求信息&#xff0c;HTTP請求信息由3部分組成&#xff1a;l 請求方法URI協議/版本l 請求頭(Request Header)l 請求正文下面是一個HTTP請求的例子&#xff1a;GET/sa…

Bootstrap——可拖動模態框(Model)

還是上一個小項目&#xff0c;o(╥﹏╥)o&#xff0c;要實現點擊一個div或者button或者一個東西然后可以彈出一個浮在最上面的彈框。網上找了找&#xff0c;發現Bootstrap的Model彈出框可以實現該功能&#xff0c;因此學習了一下&#xff0c;實現了基本彈框功能&#xff08;可拖…

mfcc中的fft操作_簡化音頻數據:FFT,STFT和MFCC

mfcc中的fft操作What we should know about sound. Sound is produced when there’s an object that vibrates and those vibrations determine the oscillation of air molecules which creates an alternation of air pressure and this high pressure alternated with low …

leetcode 765. 情侶牽手(并查集)

N 對情侶坐在連續排列的 2N 個座位上&#xff0c;想要牽到對方的手。 計算最少交換座位的次數&#xff0c;以便每對情侶可以并肩坐在一起。 一次交換可選擇任意兩人&#xff0c;讓他們站起來交換座位。 人和座位用 0 到 2N-1 的整數表示&#xff0c;情侶們按順序編號&#xff…

ariel字體_播客第58集:軟件開發人員和freeCodeCamp超級巨星Ariel Leslie

ariel字體On this weeks episode of the freeCodeCamp.org podcast, Abbey interviews Ariel Leslie, a software developer and avid contributor to the freeCodeCamp community.在本周的freeCodeCamp.org播客節目中&#xff0c;Abbey采訪了Ariel Leslie&#xff0c;他是free…

PHP繪制3D圖形

PEAR提供了Image_3D Package來創建3D圖像。圖像或光線在3D空間中按照X、Y 、Z 坐標定位。生成的圖像將呈現在2D空間中&#xff0c;可以存儲為 PNG、SVG 格式&#xff0c;或輸出到Shell。通過Image_3D可以很方便生成一些簡單的3D對象&#xff0c;例如立方體、錐體、球體、文本和…

清除日志的sql

SET NOCOUNT ONDECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INTUSE cms -- 要操作的數據庫名SELECT LogicalFileName cms_log, -- 日志文件名MaxMinutes 10, -- Limit on time allowed to wrap log.NewSize 100 -- 你想設定的日志文件的大小(M)-- Setup / init…

r語言怎么以第二列繪制線圖_用衛星圖像繪制世界海岸線圖-第二部分

r語言怎么以第二列繪制線圖Part I of this blog series is here.本博客系列的第一部分 在這里 。 At the UKHO we are interested in the oceans, the seabed and the coastline — not to mention everything in and on them! In our previous blog, we (the UKHO Data Scien…

javascript創建類_如何在10分鐘內使用JavaScript創建費用管理器

javascript創建類by Per Harald Borgen通過Per Harald Borgen 如何在10分鐘內使用JavaScript創建費用管理器 (How to create an expense organizer with JavaScript in 10 minutes) 讓我們使用ES6和Dropbox API來防止收據變得混亂。 (Let’s use ES6 and the Dropbox API to k…