寫在開頭:本文的靈感來自loading大神的文章
http://www.androidchina.net/6552.html
和diygreen大神的文章
http://www.reibang.com/p/0a984f999592#
集眾家之所長克饶,哈哈。
首先談?wù)劥a規(guī)范的重要性:團隊中每個人閱讀代碼都很容易眼滤,減少很多溝通,維護成本( 代碼閱讀的次數(shù)遠遠大于變更的次數(shù))庭敦,并且心情非常愉悅匿情。有人肯定覺得愉悅有點夸張,舉個栗子: 有一些代碼信殊,如果不是由于與工作內(nèi)容有關(guān)聯(lián)炬称,你是否有種這輩子都不情愿去接觸它的感受。但也有一些代碼涡拘,閱讀下來一氣呵成玲躯,心情舒暢,促使你有種繼續(xù)閱讀下去的沖動(并且你也會有種不想破壞這種統(tǒng)一的想法).
基礎(chǔ)層面越統(tǒng)一鳄乏,效率越高(不僅僅是指統(tǒng)一編碼規(guī)范跷车,還有基本的做事的原則). 舉個栗子: 我們團隊規(guī)定個人周報必須在每周五上班前必須發(fā)出來,否則罰款10元汞窗。之前團隊周報遲發(fā)現(xiàn)象比較突出姓赤,規(guī)則一出赡译,明顯改善(開會缺席情況也一樣得到明顯改 善)仲吏。罰錢是否不太合理?注釋寫多少才算合理蝌焚?與其花大量精力討論這些不痛不癢的問題裹唆,不如及時統(tǒng)一規(guī)范(一般制定的規(guī)范不會差的),嚴格執(zhí)行只洒。后續(xù)針對 問題即使做調(diào)整。關(guān)鍵是統(tǒng)一和嚴格執(zhí)行。
1.能1行解決就不要寫2行(不影響可讀性的情況下)腻异。
2.多余的代碼(比如注釋代碼 or 無實際意義)必須刪除庭惜。
3.codereview代碼評審。
codereview出來的問題一旦得出結(jié)論涝开,就會立馬執(zhí)行循帐。如果有疑義,可以繼續(xù)討論舀武,一直到得出結(jié)論為止拄养。規(guī)范中的內(nèi)容可以改進,但一旦形成規(guī)范就必須嚴格執(zhí)行银舱。
4.單元測試一定要寫, 這是底線(除非這個成本非常大)
5.周四盡量減少發(fā)布, 你可能沒有足夠時間去觀察/驗證,發(fā)布時尤其需要重視.
6.每周五 review當周的問題
7.接下來寫具體的代碼開發(fā)規(guī)范.
一瘪匿、變量聲明、注釋等規(guī)范
1.類名區(qū)分大小寫寻馏。
2.使用注釋將源文件分為明顯的區(qū)塊棋弥,區(qū)塊劃分如下
常量聲明區(qū)
UI控件成員變量聲明區(qū)
普通成員變量聲明區(qū)
內(nèi)部接口聲明區(qū)
初始化相關(guān)方法區(qū)
事件響應(yīng)方法區(qū)
普通邏輯方法區(qū)
重載的邏輯方法區(qū)
發(fā)起異步任務(wù)方法區(qū)
異步任務(wù)回調(diào)方法區(qū)
生命周期回調(diào)方法區(qū)(出去onCreate()方法)
內(nèi)部類聲明區(qū)
3.類成員排列通用規(guī)則
按照發(fā)生的先后順序排列
常量按照使用先后排列
UI控件成員變量按照layout文件中的先后順序排列
普通成員變量按照使用的先后順序排列
方法基本上都按照調(diào)用的先后順序在各自區(qū)塊中排列
相關(guān)功能作為小區(qū)塊放在一起(或者封裝掉)
4.重載方法不分離。當一個類有多個構(gòu)造函數(shù)诚欠,或是多個同名方法嘁锯,這些函數(shù)/方法應(yīng)該按順序出現(xiàn)在一起宪祥,中間不要放進其它函數(shù)/方法。
5.聲名數(shù)組等變量
中括號是類型的一部分:String[] args家乘, 而非 String args[]蝗羊。
6.switch塊必須包括default,即使什么處理都不做
switch (msg.what) {
case 1:
//doSomething
break;
case 2:
//doSomething
break;
default:
break;
}
7.代碼注釋仁锯,成員變量耀找、類對象、layout對象业崖、方法等統(tǒng)一采用以下樣式
/**
*
*/
方法內(nèi)部的每一行的代碼注釋用一下樣式:
//代碼行的注釋
二野芒、命名規(guī)范
1.包名
采用反域名規(guī)則,一級包名為com双炕,二級包名為公司名或者個人名狞悲,三級包名為項目名,四級包名為具體模塊名(也可以省略二級包名)妇斤,舉個栗子:com.ssb.shangshaban.activity
2.類名
采用大駝峰法摇锋,盡量避免縮寫,除非該縮寫是眾所周知的站超, 比如HTML,URL荸恕,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應(yīng)大寫死相,舉個栗子:
WelcomeActivity.java
LogUtil.java
MyDBHelper.java
3.方法名
采用小駝峰法融求,方法名一般都是動詞或者動詞短語,舉個栗子:
initData()
getUserData()
save()
4.常量名
全部字母大寫算撮,用下劃線分隔單詞生宛,常量通常是static final的,舉個栗子:
static final int NUMBER = 5;
static final ImmutableListNAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }
5.非常量字段名(略微復(fù)雜)肮柜,直接舉個栗子:
public class MyClass {
public static final int SOME_CONSTANT = 42; //常量大寫
public int pField; //公有非靜態(tài)字段p開頭
private static MyClass sSingleton; //非公有靜態(tài)字段s開頭
public static int gField; //公有靜態(tài)字段g開頭
int mPackagePrivate; //非公有非靜態(tài)m開頭
private int mPrivate; //非公有非靜態(tài)m開頭
protected int mProtected; //非公有非靜態(tài)m開頭
}
也有例外陷舅,如果項目中使用ButterKnife,則不添加m前綴素挽,以小駝峰風(fēng)格命名蔑赘。
例如,請使用 mCustomerStrFirst 和 mCustomerStrLast预明,而不要使用mFirstCustomerStr和mLastCustomerStr缩赛。
量詞列表:量詞后綴說明
First 一組變量中的第一個
Last 一組變量中的最后一個
Next 一組變量中的下一個變量
Prev 一組變量中的上一個
Cur 一組變量中的當前變量。
6.參數(shù)名
采用小駝峰法
7.資源文件命名
7.1資源布局文件:
全部小寫撰糠,采用下劃線命名法
- contentview 命名
必須以全部單詞小寫酥馍,單詞間以下劃線分割,使用名詞或名詞詞組阅酪。
所有Activity或Fragment的contentView必須與其類名對應(yīng)旨袒,對應(yīng)規(guī)則為:
將所有字母都轉(zhuǎn)為小寫汁针,將類型和功能調(diào)換(也就是后綴變前綴)。
例如:activity_main.xml
- Dialog命名:dialog_描述.xml
例如:dialog_hint.xml
- PopupWindow命名:ppw_描述.xml
例如:ppw_info.xml
- 列表項命名:item_描述.xml
例如:item_city.xml
- 包含項命名:模塊_(位置)描述.xml
例如:activity_main_head.xml砚尽、activity_main_bottom.xml
注意:通用的包含項命名采用:項目名稱縮寫_描述.xml
例如:xxxx_title.xml
7.2資源文件
全部小寫施无,采用下劃線命名法,加前綴區(qū)分
命名模式:可加后綴 small 表示小圖, big 表示大圖必孤,邏輯名稱可由多個單詞加下劃線組成猾骡,采用以下規(guī)則:
用途模塊名邏輯名稱
用途模塊名顏色
用途邏輯名稱
用途顏色
說明:用途也指控件類型(具體見UI控件縮寫表)
例如:
btn_main_home.png 按鍵
divider_maket_white.png 分割線
ic_edit.png 圖標
bg_main.png 背景
btn_red.png 紅色按鍵
btn_red_big.png 紅色大按鍵
ic_head_small.png 小頭像
bg_input.png 輸入框背景
divider_white.png 白色分割線
如果有多種形態(tài)如按鈕等除外如 btn_xx.xml(selector)
名稱 功能
btn_xx 按鈕圖片使用btn_整體效果(selector)
btn_xx_normal 按鈕圖片使用btn_正常情況效果
btn_xx_pressed 按鈕圖片使用btn_點擊時候效果
btn_xx_focused state_focused聚焦效果
btn_xx_disabled state_enabled (false)不可用效果
btn_xx_checked state_checked選中效果
btn_xx_selected state_selected選中效果
btn_xx_hovered state_hovered懸停效果
btn_xx_checkable state_checkable可選效果
btn_xx_activated state_activated激活的
btn_xx_windowfocused state_window_focused
bg_head 背景圖片使用bg_功能說明
def_search_cell 默認圖片使用def功能說明
ic_more_help 圖標圖片使用ic功能說明
seg_list_line 具有分隔特征的圖片使用seg功能說明
sel_ok 選擇圖標使用sel功能_說明
注意:
使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要規(guī)范敷搪。
7.3動畫文件(anim文件夾下):
- 動畫文件(anim文件夾下):
全部小寫兴想,采用下劃線命名法,加前綴區(qū)分赡勘。
具體動畫采用以下規(guī)則:
模塊名_邏輯名稱
邏輯名稱
refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml
普通的tween動畫采用如下表格中的命名方式
// 前面為動畫的類型嫂便,后面為方向
動畫命名例子 規(guī)范寫法
fade_in 淡入
fade_out 淡出
push_down_in 從下方推入
push_down_out 從下方推出
push_left 推向左方
slide_in_from_top 從頭部滑動進入
zoom_enter 變形進入
slide_in 滑動進入
shrink_to_middle 中間縮小
7.4values中name命名
類別 命名 示例
strings strings的name命名使用下劃線命名法,采用以下規(guī)則:
模塊名+邏輯名稱
main_menu_about 主菜單按鍵文字
friend_title 好友模塊標題欄
friend_dialog_del 好友刪除提示
login_check_email 登錄驗證
dialog_title 彈出框標題
button_ok 確認鍵 loading 加載文字
colors colors的name命名使用下劃線命名法闸与,采用以下規(guī)則:
模塊名+邏輯名稱 顏色
friend_info_bg friend_bg transparent gray
styles styles的name命名使用 Camel命名法毙替,采用以下規(guī)則:模塊名+邏輯名稱 main_tabBottom
7.5layout中的id命名
命名模式為:view縮寫_view的邏輯名稱
使用 AndroidStudio 的插件 ButterKnife Zelezny,生成注解非常方便几迄。
如果不使用 ButterKnife Zelezny蔚龙,則建議使用 view 縮寫做后綴冰评,如:username_tv(展示用戶名的TextView)