書寫規(guī)范
1. 編碼方式統(tǒng)一用UTF-8. Android Studio默認(rèn)已是UTF-8,只要不去改動(dòng)它就可以了。

2. 縮進(jìn)統(tǒng)一為4個(gè)空格,將Tab size設(shè)置為4則可以保證tab鍵按4個(gè)空格縮進(jìn)。另外,不要勾選上Use tab character,可以保證切換到不同tab長(zhǎng)度的環(huán)境時(shí)還能繼續(xù)保持統(tǒng)一的4個(gè)空格的縮進(jìn)樣式。

3. 花括號(hào)不要單獨(dú)一行,和它前面的代碼同一行。而且,花括號(hào)與前面的代碼之間用一個(gè)空格隔開。
public void method() { // Good
}
public void method()
{ // Bad
}
public void method(){ // Bad
}
4. 空格的使用
if、else、for、switch、while等邏輯關(guān)鍵字與后面的語句留一個(gè)空格隔開。
// Good
if (booleanVariable) {
// TODO while booleanVariable is true
} else {
// TODO else
}
// Bad
if(booleanVariable) {
// TODO while booleanVariable is true
}else {
// TODO else
}
運(yùn)算符兩邊各用一個(gè)空格隔開。
int result = a + b; //Good, = 和 + 兩邊各用一個(gè)空格隔開
int result=a+b; //Bad,=和+兩邊沒用空格隔開
方法的每個(gè)參數(shù)之間用一個(gè)空格隔開。
public void method(String param1, String param2); // Good,param1后面的逗號(hào)與String之間隔了一個(gè)空格
method(param1, param2); // Good,方法調(diào)用時(shí),param1后面的逗號(hào)與param2之間隔了一個(gè)空格
method(param1,param2); // Bad,沒有用一個(gè)空格隔開
5. 空行的使用
將邏輯相關(guān)的代碼段用空行隔開,以提高可讀性??招幸仓豢找恍?,不要空多行。在以下情況需用一個(gè)空行:
- 兩個(gè)方法之間
- 方法內(nèi)的兩個(gè)邏輯段之間
- 方法內(nèi)的局部變量和方法的第一條邏輯語句之間
- 常量和變量之間
6. 當(dāng)一個(gè)表達(dá)式無法容納在一行內(nèi)時(shí),可換行顯示,另起的新行用8個(gè)空格縮進(jìn)。
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
7. 一行聲明一個(gè)變量,不要一行聲明多個(gè)變量,這樣有利于寫注釋。
private String param1; // 參數(shù)1
private String param2; // 參數(shù)2
8. 行寬設(shè)置為100,設(shè)置格式化時(shí)自動(dòng)斷行到行寬位置。


9. 使用快捷鍵進(jìn)行代碼自動(dòng)格式化。
Windows:CTRL+ALT+L
Mac:OPTION+COMMAND+L
10. 一個(gè)方法最多不要超過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. 包命名
域名反寫+項(xiàng)目名稱+模塊名稱,全部單詞用小寫字母。
例如,我的KAndroid項(xiàng)目的Model模塊包名如下:
me.keeganlee.kandroid.model
2. 類和接口命名
使用大駝峰規(guī)則,用名詞或名詞詞組命名,每個(gè)單詞的首字母大寫。
以下為幾種常用類的命名:
- activity類,命名以Activity為后綴,如:LoginActivity
- fragment類,命名以Fragment為后綴,如:ShareDialogFragment
- service類,命名以Service為后綴,如:DownloadService
- adapter類,命名以Adapter為后綴,如:CouponListAdapter
- 工具類,命名以Util為后綴,如:EncryptUtil
- 模型類,命名以BO為后綴,如:CouponBO
- 接口實(shí)現(xiàn)類,命名以Impl為后綴,如:ApiImpl
3. 方法命名
使用小駝峰規(guī)則,用動(dòng)詞命名,第一個(gè)單詞的首字母小寫,其他單詞的首字母大寫。
以下為幾種常用方法的命名:
- 初始化方法,命名以init開頭,例:initView
- 按鈕點(diǎn)擊方法,命名以to開頭,例:toLogin
- 設(shè)置方法,命名以set開頭,例:setData
- 具有返回值的獲取方法,命名以get開頭,例:getData
- 通過異步加載數(shù)據(jù)的方法,命名以load開頭,例:loadData
- 布爾型的判斷方法,命名以is或has,或具有邏輯意義的單詞如equals,例:isEmpty
4. 控件縮寫
控件 |
縮寫 |
控件 |
縮寫 |
TextView |
txt |
EditText |
edt |
Button |
btn |
ImageButton |
ibtn |
ImageView |
img |
ListView |
list |
RadioGroup |
group |
RadioButton |
rbtn |
ProgressBar |
progress |
SeekBar |
seek |
CheckBox |
chk |
Spinner |
spinner |
TableLayout |
table |
TableRow |
row |
LinearLayout |
llayout |
RelativeLayout |
rlayout |
ScrollView |
scroll |
SearchView |
search |
TabHost |
host |
TabWidget |
widget |
5. 常量命名
全部為大寫單詞,單詞之間用下劃線分開。
public final static int PAGE_SIZE = 20;
6. 變量命名
{范圍描述+}意義描述+類型描述的組合,用駝峰式,首字母小寫。
private TextView headerTitleTxt; // 標(biāo)題欄的標(biāo)題
private Button loginBtn; // 登錄按鈕
private CouponBO couponBO; // 券實(shí)例
7. 控件id命名
控件縮寫_{范圍_}意義,范圍可選,只在有明確定義的范圍內(nèi)才需要加上。
<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_{范圍_}功能,為L(zhǎng)istView的item命名格式
- item_grid_{范圍_}功能,為GridView的item命名格式
- header_list_{范圍_}功能,為L(zhǎng)istView的HeaderView命名格式
- footer_list_{范圍_}功能,為L(zhǎng)istView的FooterView命名格式
9. strings的命名
類型_{范圍_}功能,范圍可選。
以下為幾種常用的命名:
- 頁面標(biāo)題,命名格式為:title_頁面
- 按鈕文字,命名格式為:btn_按鈕事件
- 標(biāo)簽文字,命名格式為:label_標(biāo)簽文字
- 選項(xiàng)卡文字,命名格式為:tab_選項(xiàng)卡文字
- 消息框文字,命名格式為:toast_消息
- 編輯框的提示文字,命名格式為:hint_提示信息
- 圖片的描述文字,命名格式為:desc_圖片文字
- 對(duì)話框的文字,命名格式為:dialog_文字
- menu的item文字,命名格式為:action_文字
10. colors的命名
前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個(gè)。
- 背景顏色,添加bg前綴
- 文本顏色,添加text前綴
- 分割線顏色,添加div前綴
- 區(qū)分狀態(tài)時(shí),默認(rèn)狀態(tài)的顏色,添加normal后綴
- 區(qū)分狀態(tài)時(shí),按下時(shí)的顏色,添加pressed后綴
- 區(qū)分狀態(tài)時(shí),選中時(shí)的顏色,添加selected后綴
- 區(qū)分狀態(tài)時(shí),不可用時(shí)的顏色,添加disable后綴
11. drawable的命名
前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個(gè)。
- 圖標(biāo)類,添加ic前綴
- 背景類,添加bg前綴
- 分隔類,添加div前綴
- 默認(rèn)類,添加def前綴
- 區(qū)分狀態(tài)時(shí),默認(rèn)狀態(tài),添加normal后綴
- 區(qū)分狀態(tài)時(shí),按下時(shí)的狀態(tài),添加pressed后綴
- 區(qū)分狀態(tài)時(shí),選中時(shí)的狀態(tài),添加selected后綴
- 區(qū)分狀態(tài)時(shí),不可用時(shí)的狀態(tài),添加disable后綴
- 多種狀態(tài)的,添加selector后綴(一般為L(zhǎng)istView的selector或按鈕的selector)
12. 動(dòng)畫文件命名
動(dòng)畫類型_動(dòng)畫方向。
- fade_in,淡入
- fade_out,淡出
- push_down_in,從下方推入
- push_down_out,從下方推出
- slide_in_from_top,從頭部滑動(dòng)進(jìn)入
- zoom_enter,變形進(jìn)入
- 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è)//來注釋,若注釋說明太長(zhǎng)則在上方添加注釋。
- 接口中定義的所有常量
- 公有類的公有常量
- 枚舉類定義的所有枚舉常量
- 實(shí)體類的所有屬性變量
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ǎn)介
結(jié)束語
這份開發(fā)規(guī)范說明比較細(xì),也許還不是非常完整,但里面提到的每一條規(guī)范都很有用。按照此規(guī)范嚴(yán)格執(zhí)行,將大大提高代碼的可讀性和維護(hù)性。