Android技術(shù)積累:開發(fā)規(guī)范

作者:Keegan小鋼
原文地址:http://keeganlee.me/post/android/20150709

上個月發(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
  • 布爾型的判斷方法,命名以ishas狡恬,或具有邏輯意義的單詞如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_{范圍_}功能,為ListViewitem命名格式
  • item_grid_{范圍_}功能煎楣,為GridViewitem命名格式
  • header_list_{范圍_}功能豺总,為ListViewHeaderView命名格式
  • footer_list_{范圍_}功能,為ListViewFooterView命名格式

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í)行但汞,將大大提高代碼的可讀性和維護性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末互站,一起剝皮案震驚了整個濱河市私蕾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌云茸,老刑警劉巖是目,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤饭,死亡現(xiàn)場離奇詭異标捺,居然都是意外死亡,警方通過查閱死者的電腦和手機揉抵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門亡容,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人冤今,你說我怎么就攤上這事闺兢。” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵屋谭,是天一觀的道長脚囊。 經(jīng)常有香客問我,道長桐磁,這世上最難降的妖魔是什么悔耘? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮我擂,結(jié)果婚禮上衬以,老公的妹妹穿的比我還像新娘。我一直安慰自己校摩,他們只是感情好看峻,可當(dāng)我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衙吩,像睡著了一般互妓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坤塞,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天车猬,我揣著相機與錄音,去河邊找鬼尺锚。 笑死珠闰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瘫辩。 我是一名探鬼主播伏嗜,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伐厌!你這毒婦竟也來了承绸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤挣轨,失蹤者是張志新(化名)和其女友劉穎军熏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卷扮,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡荡澎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晤锹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摩幔。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞭铆,靈堂內(nèi)的尸體忽然破棺而出或衡,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布封断,位于F島的核電站斯辰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坡疼。R本人自食惡果不足惜椒涯,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望回梧。 院中可真熱鬧废岂,春花似錦、人聲如沸狱意。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽详囤。三九已至财骨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藏姐,已是汗流浹背隆箩。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羔杨,地道東北人捌臊。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像兜材,于是被迫代替她去往敵國和親理澎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內(nèi)容