Android技術積累:開發規范

轉載自Keegan小鋼

原文鏈接:http://keeganlee.me/post/android/20150709

書寫規范

1. 編碼方式統一用UTF-8. Android Studio默認已是UTF-8,只要不去改動它就可以了。

2. 縮進統一為4個空格,將Tab size設置為4則可以保證tab鍵按4個空格縮進。另外,不要勾選上Use tab character,可以保證切換到不同tab長度的環境時還能繼續保持統一的4個空格的縮進樣式。

3. 花括號不要單獨一行,和它前面的代碼同一行。而且,花括號與前面的代碼之間用一個空格隔開。

publicvoidmethod(){// Good}publicvoidmethod(){// Bad}publicvoidmethod(){// Bad}

4. 空格的使用

if、else、for、switch、while等邏輯關鍵字與后面的語句留一個空格隔開。

// Goodif(booleanVariable){// TODO while booleanVariable is true}else{// TODO else}// Badif(booleanVariable){// TODO while booleanVariable is true}else{// TODO else}

運算符兩邊各用一個空格隔開。

intresult=a+b;//Good, = 和 + 兩邊各用一個空格隔開intresult=a+b;//Bad,=和+兩邊沒用空格隔開

方法的每個參數之間用一個空格隔開。

publicvoidmethod(Stringparam1,Stringparam2);// Good,param1后面的逗號與String之間隔了一個空格method(param1,param2);// Good,方法調用時,param1后面的逗號與param2之間隔了一個空格method(param1,param2);// Bad,沒有用一個空格隔開

5. 空行的使用

將邏輯相關的代碼段用空行隔開,以提高可讀性??招幸仓豢找恍校灰斩嘈小T谝韵虑闆r需用一個空行:

兩個方法之間

方法內的兩個邏輯段之間

方法內的局部變量和方法的第一條邏輯語句之間

常量和變量之間

6. 當一個表達式無法容納在一行內時,可換行顯示,另起的新行用8個空格縮進。

someMethod(longExpression1,longExpression2,longExpression3,longExpression4,longExpression5);

7. 一行聲明一個變量,不要一行聲明多個變量,這樣有利于寫注釋。

privateStringparam1;// 參數1privateStringparam2;// 參數2

8. 行寬設置為100,設置格式化時自動斷行到行寬位置。

9. 使用快捷鍵進行代碼自動格式化。

Windows:CTRL+ALT+L

Mac:OPTION+COMMAND+L

10. 一個方法最多不要超過40行代碼。

11. 范圍型的常量用枚舉類定義,而不要直接用整型或字符,這樣可以減少范圍值的有效性檢查。

// 用枚舉類定義,GoodpublicenumCouponType{// 現金券@SerializedName("1")CASH,// 抵用券@SerializedName("2")DEBIT,// 折扣券@SerializedName("3")DISCOUNT}// 用整型定義,BadpublicstaticfinalintTYPE_CASH=1;// 現金券publicstaticfinalintTYPE_DEBIT=2;// 抵扣券publicstaticfinalintTYPE_DISCOUNT=3;// 折扣券

12. 文字大小的單位統一用sp,元素大小的單位統一用dp。

13. 應用中的字符串統一在strings.xml中定義,然后在代碼和布局文件中引用。

14. 顏色值統一在colors.xml中定義,然后在代碼和布局文件中引用。另外,不要在代碼和布局文件中引用系統的顏色,除了透明。

命名規范

1. 包命名

域名反寫+項目名稱+模塊名稱,全部單詞用小寫字母。

例如,我的KAndroid項目的Model模塊包名如下:

me.keeganlee.kandroid.model

2. 類和接口命名

使用大駝峰規則,用名詞或名詞詞組命名,每個單詞的首字母大寫。

以下為幾種常用類的命名:

activity類,命名以Activity為后綴,如:LoginActivity

fragment類,命名以Fragment為后綴,如:ShareDialogFragment

service類,命名以Service為后綴,如:DownloadService

adapter類,命名以Adapter為后綴,如:CouponListAdapter

工具類,命名以Util為后綴,如:EncryptUtil

模型類,命名以BO為后綴,如:CouponBO

接口實現類,命名以Impl為后綴,如:ApiImpl

3. 方法命名

使用小駝峰規則,用動詞命名,第一個單詞的首字母小寫,其他單詞的首字母大寫。

以下為幾種常用方法的命名:

初始化方法,命名以init開頭,例:initView

按鈕點擊方法,命名以to開頭,例:toLogin

設置方法,命名以set開頭,例:setData

具有返回值的獲取方法,命名以get開頭,例:getData

通過異步加載數據的方法,命名以load開頭,例:loadData

布爾型的判斷方法,命名以is或has,或具有邏輯意義的單詞如equals,例:isEmpty

4. 控件縮寫

控件縮寫控件縮寫

TextViewtxtEditTextedt

ButtonbtnImageButtonibtn

ImageViewimgListViewlist

RadioGroupgroupRadioButtonrbtn

ProgressBarprogressSeekBarseek

CheckBoxchkSpinnerspinner

TableLayouttableTableRowrow

LinearLayoutllayoutRelativeLayoutrlayout

ScrollViewscrollSearchViewsearch

TabHosthostTabWidgetwidget

5. 常量命名

全部為大寫單詞,單詞之間用下劃線分開。

publicfinalstaticintPAGE_SIZE=20;

6. 變量命名

{范圍描述+}意義描述+類型描述的組合,用駝峰式,首字母小寫。

privateTextViewheaderTitleTxt;// 標題欄的標題privateButtonloginBtn;// 登錄按鈕privateCouponBOcouponBO;// 券實例

7. 控件id命名

控件縮寫_{范圍_}意義,范圍可選,只在有明確定義的范圍內才需要加上。

8. layout命名

組件類型_{范圍_}功能,范圍可選,只在有明確定義的范圍內才需要加上。

以下為幾種常用的組件類型命名:

activity_{范圍_}功能,為Activity的命名格式

fragment_{范圍_}功能,為Fragment的命名格式

dialog_{范圍_}功能,為Dialog的命名格式

item_list_{范圍_}功能,為ListView的item命名格式

item_grid_{范圍_}功能,為GridView的item命名格式

header_list_{范圍_}功能,為ListView的HeaderView命名格式

footer_list_{范圍_}功能,為ListView的FooterView命名格式

9. strings的命名

類型_{范圍_}功能,范圍可選。

以下為幾種常用的命名:

頁面標題,命名格式為:title_頁面

按鈕文字,命名格式為:btn_按鈕事件

標簽文字,命名格式為:label_標簽文字

選項卡文字,命名格式為:tab_選項卡文字

消息框文字,命名格式為:toast_消息

編輯框的提示文字,命名格式為:hint_提示信息

圖片的描述文字,命名格式為:desc_圖片文字

對話框的文字,命名格式為:dialog_文字

menu的item文字,命名格式為:action_文字

10. colors的命名

前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。

背景顏色,添加bg前綴

文本顏色,添加text前綴

分割線顏色,添加div前綴

區分狀態時,默認狀態的顏色,添加normal后綴

區分狀態時,按下時的顏色,添加pressed后綴

區分狀態時,選中時的顏色,添加selected后綴

區分狀態時,不可用時的顏色,添加disable后綴

11. drawable的命名

前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。

圖標類,添加ic前綴

背景類,添加bg前綴

分隔類,添加div前綴

默認類,添加def前綴

區分狀態時,默認狀態,添加normal后綴

區分狀態時,按下時的狀態,添加pressed后綴

區分狀態時,選中時的狀態,添加selected后綴

區分狀態時,不可用時的狀態,添加disable后綴

多種狀態的,添加selector后綴(一般為ListView的selector或按鈕的selector)

12. 動畫文件命名

動畫類型_動畫方向。

fade_in,淡入

fade_out,淡出

push_down_in,從下方推入

push_down_out,從下方推出

slide_in_from_top,從頭部滑動進入

zoom_enter,變形進入

shrink_to_middle,中間縮小

注釋規范

1. 文件頭注釋

文件頂部統一添加版權聲明,聲明的格式如下:

/*** Copyright (c) 2015. Keegan小鋼 Inc. All rights reserved.*/

2. 類和接口注釋

類和接口統一添加javadoc注釋,格式如下:

/*** 類或接口的描述信息** @author ${USER}* @date ${DATE}*/

3. 方法注釋

下面幾種方法,都必須添加javadoc注釋,說明該方法的用途和參數說明,以及返回值的說明。

接口中定義的所有方法

抽象類中自定義的抽象方法

抽象父類的自定義公用方法

工具類的公用方法

/*** 登錄** @param loginName 登錄名* @param password? 密碼* @param listener? 回調監聽器*/publicvoidlogin(StringloginName,Stringpassword,ActionCallbackListenerlistener);

4. 變量和常量注釋

下面幾種情況下的常量和變量,都要添加注釋說明,優先采用右側//來注釋,若注釋說明太長則在上方添加注釋。

接口中定義的所有常量

公有類的公有常量

枚舉類定義的所有枚舉常量

實體類的所有屬性變量

publicstaticfinalintTYPE_CASH=1;// 現金券publicstaticfinalintTYPE_DEBIT=2;// 抵扣券publicstaticfinalintTYPE_DISCOUNT=3;// 折扣券privateintid;// 券idprivateStringname;// 券名稱privateStringintroduce;// 券簡介

結束語

這份開發規范說明比較細,也許還不是非常完整,但里面提到的每一條規范都很有用。按照此規范嚴格執行,將大大提高代碼的可讀性和維護性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容