上個月發(fā)布了Android項目重構(gòu)的三篇系列文章坞古,其中十办,界面篇中提到了在項目中保持規(guī)范性的重要性浙于,也有簡單舉了幾個例子稻轨。這篇文章則將其延伸政钟,提供更完整的開發(fā)規(guī)范說明。
書寫規(guī)范
1.編碼方式統(tǒng)一用UTF-8
. Android Studio默認已是UTF-8
潮秘,只要不去改動它就可以了琼开。
2.縮進統(tǒng)一為4
個空格,將Tab size
設(shè)置為4
則可以保證tab鍵按4
個空格縮進唇跨。另外,不要勾選上Use tab character
衬衬,可以保證切換到不同tab長度的環(huán)境時還能繼續(xù)保持統(tǒng)一的4
個空格的縮進樣式买猖。
3.花括號不要單獨一行,和它前面的代碼同一行滋尉。而且玉控,花括號與前面的代碼之間用一個空格隔開。
public void method() { // Good
}
public void method()
{ // Bad
}
public void method(){ // Bad
}
4.空格的使用
// Good
if (booleanVariable) {
// TODO while booleanVariable is true
} else {
// TODO else
}
// Bad
if(booleanVariable) {
// TODO while booleanVariable is true
}else {
// TODO else
}
運算符兩邊各用一個空格隔開狮惜。
int result = a + b; //Good, = 和 + 兩邊各用一個空格隔開
int result=a+b; //Bad,=和+兩邊沒用空格隔開
方法的每個參數(shù)之間用一個空格隔開高诺。
public void method(String param1, String param2); // Good,param1后面的逗號與String之間隔了一個空格
method(param1, param2); // Good碾篡,方法調(diào)用時虱而,param1后面的逗號與param2之間隔了一個空格
method(param1,param2); // Bad,沒有用一個空格隔開
5.空行的使用
將邏輯相關(guān)的代碼段用空行隔開开泽,以提高可讀性牡拇。空行也只空一行穆律,不要空多行惠呼。在以下情況需用一個空行:
- 兩個方法之間
- 方法內(nèi)的兩個邏輯段之間
- 方法內(nèi)的局部變量和方法的第一條邏輯語句之間
- 常量和變量之間
6.當(dāng)一個表達式無法容納在一行內(nèi)時,可換行顯示峦耘,另起的新行用8
個空格縮進剔蹋。
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
7.一行聲明一個變量,不要一行聲明多個變量辅髓,這樣有利于寫注釋泣崩。
private String param1; // 參數(shù)1
private String param2; // 參數(shù)2
8.行寬設(shè)置為100
少梁,設(shè)置格式化時自動斷行到行寬位置。
9.使用快捷鍵進行代碼自動格式化律想。
- Windows:
CTRL+ALT+L
- Mac:
OPTION+COMMAND+L
10.一個方法最多不要超過40行
代碼猎莲。
11.范圍型的常量用枚舉類定義,而不要直接用整型或字符技即,這樣可以減少范圍值的有效性檢查著洼。
// 用枚舉類定義,Good
public enum CouponType {
// 現(xiàn)金券
@SerializedName("1")
CASH,
// 抵用券
@SerializedName("2")
DEBIT,
// 折扣券
@SerializedName("3")
DISCOUNT
}
// 用整型定義而叼,Bad
public static final int TYPE_CASH = 1; // 現(xiàn)金券
public static final int TYPE_DEBIT = 2; // 抵扣券
public static final int TYPE_DISCOUNT = 3; // 折扣券
12.文字大小的單位統(tǒng)一用sp
身笤,元素大小的單位統(tǒng)一用dp
。
13.應(yīng)用中的字符串統(tǒng)一在strings.xml
中定義葵陵,然后在代碼和布局文件中引用液荸。
14.顏色值統(tǒng)一在colors.xml
中定義,然后在代碼和布局文件中引用脱篙。另外娇钱,不要在代碼和布局文件中引用系統(tǒng)的顏色,除了透明绊困。
命名規(guī)范
1.包命名
域名反寫+項目名稱+模塊名稱
文搂,全部單詞用小寫字母。
例如煤蹭,我的KAndroid項目的Model
模塊包名如下:
me.keeganlee.kandroid.model
2.類和接口命名
使用大駝峰規(guī)則,用名詞或名詞詞組命名取视,每個單詞的首字母大寫硝皂。以下為幾種常用類的命名:
-
activity
類,命名以Activity
為后綴作谭,如:LoginActivity -
fragment
類稽物,命名以Fragment
為后綴,如:ShareDialogFragment -
service
類折欠,命名以Service
為后綴姨裸,如:DownloadService -
adapter
類,命名以Adapter
為后綴怨酝,如:CouponListAdapter - 工具類傀缩,命名以
Util
為后綴,如:EncryptUtil - 模型類农猬,命名以
BO
為后綴赡艰,如:CouponBO - 接口實現(xiàn)類,命名以
Impl
為后綴斤葱,如:ApiImpl
3.方法命名
使用小駝峰規(guī)則慷垮,用動詞命名揖闸,第一個單詞的首字母小寫,其他單詞的首字母大寫料身。以下為幾種常用方法的命名:
- 初始化方法汤纸,命名以
init
開頭,例:initView - 按鈕點擊方法芹血,命名以
to
開頭贮泞,例:toLogin - 設(shè)置方法,命名以
set
開頭幔烛,例:setData - 具有返回值的獲取方法啃擦,命名以
get
開頭,例:getData - 通過異步加載數(shù)據(jù)的方法饿悬,命名以
load
開頭令蛉,例:loadData - 布爾型的判斷方法,命名以
is
或has
狡恬,或具有邏輯意義的單詞如equals珠叔,例:isEmpty
4.控件縮寫
5.常量命名
全部為大寫單詞,單詞之間用下劃線分開弟劲。
public final static int PAGE_SIZE = 20;
6.變量命名
{范圍描述+}意義描述+類型描述
的組合祷安,用駝峰式,首字母小寫函卒。
private TextView headerTitleTxt; // 標(biāo)題欄的標(biāo)題
private Button loginBtn; // 登錄按鈕
private CouponBO couponBO; // 券實例
7.控件id命名
控件縮寫_{范圍_}意義
辆憔,范圍可選撇眯,只在有明確定義的范圍內(nèi)才需要加上报嵌。
<!-- 這是標(biāo)題欄的標(biāo)題 -->
<TextView
android:id="@+id/txt_header_title"
... />
<!-- 這是登錄按鈕 -->
<Button
android:id="@+id/btn_login"
... />
8.layout命名
組件類型_{范圍_}功能
,范圍可選熊榛,只在有明確定義的范圍內(nèi)才需要加上锚国。
以下為幾種常用的組件類型命名:
-
activity_{范圍_}功能
,為Activity
的命名格式 -
fragment_{范圍_}功能
玄坦,為Fragment
的命名格式 -
dialog_{范圍_}功能
血筑,為Dialog
的命名格式 -
item_list_{范圍_}功能
,為ListView
的item
命名格式 -
item_grid_{范圍_}功能
煎楣,為GridView
的item
命名格式 -
header_list_{范圍_}功能
豺总,為ListView
的HeaderView
命名格式 -
footer_list_{范圍_}功能
,為ListView
的FooterView
命名格式
9.strings的命名
類型_{范圍_}功能
择懂,范圍可選喻喳。以下為幾種常用的命名:
- 頁面標(biāo)題,命名格式為:
title_頁面
- 按鈕文字困曙,命名格式為:
btn_按鈕事件
- 標(biāo)簽文字表伦,命名格式為:
label_標(biāo)簽文字
- 選項卡文字谦去,命名格式為:
tab_選項卡文字
- 消息框文字,命名格式為:
toast_消息
- 編輯框的提示文字蹦哼,命名格式為:
hint_提示信息
- 圖片的描述文字鳄哭,命名格式為:
desc_圖片文字
- 對話框的文字,命名格式為:
dialog_文字
- menu的item文字纲熏,命名格式為:
action_文字
10.colors的命名
前綴{_控件}{_范圍}{_后綴}
妆丘,控件、范圍赤套、后綴可選飘痛,但控件和范圍至少要有一個。
- 背景顏色容握,添加
bg
前綴 - 文本顏色宣脉,添加
text
前綴 - 分割線顏色,添加
div
前綴 - 區(qū)分狀態(tài)時剔氏,默認狀態(tài)的顏色塑猖,添加
normal
后綴 - 區(qū)分狀態(tài)時,按下時的顏色谈跛,添加
pressed
后綴 - 區(qū)分狀態(tài)時羊苟,選中時的顏色,添加
selected
后綴 - 區(qū)分狀態(tài)時感憾,不可用時的顏色蜡励,添加
disable
后綴
11.drawable的命名
前綴{_控件}{_范圍}{_后綴}
,控件阻桅、范圍凉倚、后綴可選,但控件和范圍至少要有一個嫂沉。
- 圖標(biāo)類稽寒,添加
ic
前綴 - 背景類,添加
bg
前綴 - 分隔類趟章,添加
div
前綴 - 默認類杏糙,添加
def
前綴 - 區(qū)分狀態(tài)時,默認狀態(tài)蚓土,添加
normal
后綴 - 區(qū)分狀態(tài)時宏侍,按下時的狀態(tài),添加
pressed
后綴 - 區(qū)分狀態(tài)時蜀漆,選中時的狀態(tài)谅河,添加
selected
后綴 - 區(qū)分狀態(tài)時,不可用時的狀態(tài),添加
disable
后綴 - 多種狀態(tài)的旧蛾,添加
selector
后綴(一般為ListView的selector
或按鈕的selector
)
12.動畫文件命名
動畫類型_動畫方向
莽龟。
-
fade_in
,淡入 -
fade_out
锨天,淡出 -
push_down_in
毯盈,從下方推入 -
push_down_out
,從下方推出 -
slide_in_from_top
病袄,從頭部滑動進入 -
zoom_enter
搂赋,變形進入 -
shrink_to_middle
,中間縮小
注釋規(guī)范
1.文件頭注釋
文件頂部統(tǒng)一添加版權(quán)聲明益缠,聲明的格式如下:
/**
* Copyright (c) 2015. Keegan小鋼 Inc. All rights reserved.
*/
2.類和接口注釋
類和接口統(tǒng)一添加javadoc注釋脑奠,格式如下:
/**
* 類或接口的描述信息
*
* @author ${USER}
* @date ${DATE}
*/
3.方法注釋
下面幾種方法,都必須添加javadoc注釋幅慌,說明該方法的用途和參數(shù)說明宋欺,以及返回值的說明。
- 接口中定義的所有方法
- 抽象類中自定義的抽象方法
- 抽象父類的自定義公用方法
- 工具類的公用方法
**
* 登錄
*
* @param loginName 登錄名
* @param password 密碼
* @param listener 回調(diào)監(jiān)聽器
*/
public void login(String loginName, String password, ActionCallbackListener<Void> listener);
4.變量和常量注釋
下面幾種情況下的常量和變量胰伍,都要添加注釋說明齿诞,優(yōu)先采用右側(cè)//
來注釋,若注釋說明太長則在上方添加注釋骂租。
- 接口中定義的所有常量
- 公有類的公有常量
- 枚舉類定義的所有枚舉常量
- 實體類的所有屬性變量
public static final int TYPE_CASH = 1; // 現(xiàn)金券
public static final int TYPE_DEBIT = 2; // 抵扣券
public static final int TYPE_DISCOUNT = 3; // 折扣券
private int id; // 券id
private String name; // 券名稱
private String introduce; // 券簡介
結(jié)束語
這份開發(fā)規(guī)范說明比較細祷杈,也許還不是非常完整,但里面提到的每一條規(guī)范都很有用渗饮。按照此規(guī)范嚴(yán)格執(zhí)行但汞,將大大提高代碼的可讀性和維護性。