序言
在使用android studio編寫程式碼的時候,有一些模版功能能夠增加開發效率,例如,當你輸入logd
的時候,會出現如下圖選項:
然後選擇這一項按下enter鍵,就會自動出現如下程式碼:
Log.d(TAG, "onCreate: ");
複製程式碼
並且游標定位在冒號後面,這樣就能方便的增加日誌資訊,下面來介紹一下該功能。
新增自己的模版
剛才的日誌輸出後的TAG沒有定義,現在來建立一個TAG的模版。
進入android studio的設定介面後,然後開啟如下地方:
然後點選皮膚右上方的家好店,就可以分別建立模版及模版組(模版指logd,模版組指AndroidLog),先選擇user組,然後選擇建立模版,在Abbreviation處填寫輸入喚起模版的關鍵詞,對應於日誌模版的 logd
,我們在這兒輸入 tag
,Description處填寫這一個模版的描述資訊,在這兒填寫 public static final String TAG = "";
,然後在下面的內容區域填寫之後模版要生成的內容,填寫上 public static final String TAG = "$className$";
,這時皮膚如下:
其中className變顏色了,這時模版的語法,使用兩個$來標記這是帶填充的內容,然後點選右側的 Edit variables 按鈕,為帶填充的內容選擇內容:
每一項都很好理解,我們在表示式處選擇 className()
,然後點選下方的 Define
來設定這個模版能使用的地方。
我們選擇java下面的 declaration,這樣他能在java的class下面和欄位同級的地方使用。
然後我們在class宣告屬性的地方輸入tag:
按下enter就直接出現瞭如下程式碼:
public static final String TAG = "MainActivity";
複製程式碼
如此我們就成功新增了一個使用的自定義模版。
模版功能的更多介紹
在模版裡輸入雙美元符號包裹的屬性事,如果屬性名輸入相同的,最後能生成相同的值。如果不為屬性選擇函式,就需要自己去輸入值,其的用法可以參見下一節的 快速生成retrofit的field註解 。
下面列舉一些常用的屬性的生成函式:
函式名 | 函式值 |
---|---|
user() | 當前計算機的使用者名稱 |
date() | 當前時間 |
methodName() | 當前方法名 |
methodParameters() | 當前方法的輸入引數 |
methodReturnType() | 當前方法的返回值型別 |
className() | 當前類的類名 |
classNameComplete() | 當前類的完整類名 |
還有一些其他的可以自行探索。
一些實用模版
下面介紹幾個實用的模版。
頁面的根佈局
在xml檔案裡快速生成以LinearLayout為根佈局的模版:
使用 DataBinding
的版本
供於測試的時候快速生成main方法的模版
Activity頭部的註釋
快速生成retrofit的field註解
可以將如下配置檔案複製,儲存為user.xml,放在android studio的配置目錄裡面直接引入這些模版,其中mac儲存在 user/{使用者名稱}/資源庫/Preferences/AndroidStudio3.2/templates 下面,Windows儲存在C盤下 .AndroidStudio3.2 的相應位置。
<templateSet group="user">
<template name="noteActivity" value="/** * Activity描述資訊: * <p> * 需要的intent引數: * * @author $USER$ * @date $DATE$ */ " description="Activity頭部註釋" toReformat="false" toShortenFQNames="true">
<variable name="USER" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="DATE" expression="date()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="api" value="/** * 描述: * @param $param$ * @return $return$ * @exception $exception$ * @see IOException */" description="api註釋" toReformat="false" toShortenFQNames="true">
<variable name="param" expression="methodParameters()" defaultValue="" alwaysStopAt="true" />
<variable name="return" expression="methodReturnType()" defaultValue="" alwaysStopAt="true" />
<variable name="exception" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="fbc" value="($cast$) findViewById(R.id.$resId$);" description="findViewById with cast" toReformat="false" toShortenFQNames="true" deactivated="true">
<variable name="cast" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="resId" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_EXPRESSION" value="true" />
</context>
</template>
<template name="retrofitQuery" value="@Query("$name$") String $name$" description="retrofit Query引數" toReformat="false" toShortenFQNames="true">
<variable name="name" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="retrofitField" value="@Query("$name$") String $name$" description="retrofit Field引數" toReformat="false" toShortenFQNames="true">
<variable name="name" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="syso" value="System.out.println($message$);" description="System.out.println();" toReformat="false" toShortenFQNames="true">
<variable name="message" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_STATEMENT" value="true" />
</context>
</template>
<template name="tag" value="public static final String TAG = "$className$";" description="public static final String TAG = "";" toReformat="false" toShortenFQNames="true">
<variable name="className" expression="className()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="noteContentProvider" value="/** * ContentProvider描述資訊: * <p> * * @author $USER$ * @date $DATE$ */ " description="ContentProvider頭部註釋" toReformat="false" toShortenFQNames="true">
<variable name="USER" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="DATE" expression="date()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="noteService" value="/** * Service描述資訊: * <p> * * * @author $USER$ * @date $DATE$ */ " description="Service頭部註釋" toReformat="false" toShortenFQNames="true">
<variable name="USER" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="DATE" expression="date()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="noteBroadcastReceiver" value="/** * BroadcastReceiver描述資訊: * <p> * 監聽的廣播: * * @author $USER$ * @date $DATE$ */ " description="BroadcastReceiver頭部註釋" toReformat="false" toShortenFQNames="true">
<variable name="USER" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="DATE" expression="date()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="noteCommon" value="/** * 類描述資訊: * * @author $USER$ * @date $DATE$ */ " description="java類頭部註釋" toReformat="false" toShortenFQNames="true">
<variable name="USER" expression="user()" defaultValue="" alwaysStopAt="true" />
<variable name="DATE" expression="date()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="layoutRoot DataBinding" value="<layout> <data> </data> <LinearLayout 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" android:orientation="vertical"> </LinearLayout> </layout>" description="頁面的初始佈局 DataBinding" toReformat="false" toShortenFQNames="true">
<context>
<option name="XML" value="true" />
</context>
</template>
<template name="layoutRoot" value="<LinearLayout 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" android:orientation="vertical"> </LinearLayout> " description="頁面的初始佈局" toReformat="false" toShortenFQNames="true">
<context>
<option name="XML" value="true" />
</context>
</template>
<template name="main" value=" public static void main(String[] args) { }" description="main方法" toReformat="false" toShortenFQNames="true">
<context>
<option name="JAVA_DECLARATION" value="true" />
</context>
</template>
<template name="mode" value="<input type="button" name="$method$" value="$method$" onClick="$method$();" /> function $method$() { $("result").innerText = "$method$"; var ret = HardwareInfo.$method$(); $("result").innerText = "$method$成功" + ret; } " description="模板" toReformat="false" toShortenFQNames="true">
<variable name="method" expression="" defaultValue="" alwaysStopAt="true" />
<context>
<option name="JAVA_CODE" value="true" />
</context>
</template>
</templateSet>
複製程式碼