本文為 Crocutax 原創(chuàng) , 轉載請注明出處 http://www.crocutax.com
核心原則
- 見名知意
- 嚴格執(zhí)行命名規(guī)范
- 全局禁用拼音
分包規(guī)范
包名全部小寫,連續(xù)的單詞只是簡單地連接起來,不使用下劃線。 采用反域名命名規(guī)則,全部使用小寫字母。一級包名為com,二級包名為xxx(公司名),三級包名根據(jù)應用進行命名,四級包名為模塊名或層級名。 例如:com.longke.qq.activity
com.xxx.activity Activity類
com.xxx.service Service
com.xxx.receiver BroadCastReceiver
com.xxx.provider ContentProvider
com.xxx.base 基類
com.xxx.adapter ViewPager/RecyclerView等適配器
com.xxx.util 各種StringUtil,NetUtil,BitmapUtil等工具類
com.xxx.view 自定義view/第三方開源控件
com.xxx.bean 各種實體類,下面可以再細分VO,PO,DTO
com.xxx.db 數(shù)據(jù)庫操作類
注意:
- 部分特殊的第三方SDK,比如微信支付,Zxing,訊飛語言等對如果對包位置有特殊要求的,按第三方要求來
- MyApplication等全局相關的配置類,放在包名目錄下
命名規(guī)范
類
Activity / Fragment / Adapter / Bean...
類名由一個或多個單詞組成,采用 大駝峰命名法
同一界面,不同類型的類,前綴必須一樣,比如:HomePageActivity,HomePageFragment,HomePageListAdapter...
Listener
Listener接口監(jiān)聽事件的命名規(guī)范:以On開頭Listener作為后綴。
具體:On+事件描述+Listener
例如:點擊事件:OnClickListener
對應的調用方法:setOnClickListener()
常量
常量命名采用 : 全大寫 + 下劃線方式例如:
public static final int LOGIN_FLAG = 1 ;
intent標記的key以INTENT 開頭 , 各個單詞以_隔開,例如:
public static final String INTENT_CAR_ID = "intentCarId";
變量
變量以小駝峰式命名法,不同類型的變量又有不同的命名方式.
私有成員變量
必須以"m"開頭 + 變量名
例如:
private int mThemeId = 0;
private boolean mIsOpen;
private List<Strng> mUrlList;
靜態(tài)成員變量
必須以"s"開頭 + 變量名
private static boolean sIsOpen = false;
局部變量
小駝峰命名法
public String getUserName(){
String userName = getUserNameFromDB();
...
}
方法
方法命名規(guī)則采用小駝峰命名法例如:
onCreate() / onResume() / onRun()
getXX()返回某個值的方法
initXX() 初始化相關方法,比如初始化布局:initView()
checkXX()和isXX()方法為boolean值的時候使用is或者check為前綴
saveXX() 保存數(shù)據(jù)
clearXX()和removeXX() 清除數(shù)據(jù)
updateXX() 更新數(shù)據(jù)
processXX() 對數(shù)據(jù)進行處理
dispalyXX() 顯示某某信息
對于方法的其他一些規(guī)范
- 方法的參數(shù)盡可能不超過4個,多余4個考慮采用builder模式或者JavaBean形式
- 注意單一職責原則
- 方法盡量避免返回null,可以考慮拋異?;蚩諗?shù)據(jù),比如Collections.emptyList()
類聲明規(guī)范
區(qū)塊劃分
建議使用注釋將源文件分為明顯的區(qū)塊,區(qū)塊劃分如下
常量聲明區(qū)
UI控件成員變量聲明區(qū)
普通成員變量聲明區(qū)
內(nèi)部接口聲明區(qū)
初始化相關方法區(qū)
事件響應方法區(qū)
普通邏輯方法區(qū)
重載的邏輯方法區(qū)
生命周期回調方法區(qū)
內(nèi)部類聲明區(qū)
類成員排列通用規(guī)則
按照發(fā)生的先后順序排列
常量按照使用先后排列
UI控件成員變量按照layout文件中的先后順序排列
普通成員變量按照使用的先后順序排列
方法基本上都按照調用的先后順序在各自區(qū)塊中排列
相關功能作為小區(qū)塊放在一起(或者作為一個封裝體引入)
重載方法永不分離,當一個類有多個構造函數(shù),或是多個同名方法,這些函數(shù)/方法應該按順序出現(xiàn)在一起,中間不要放進其它函數(shù)/方法。
資源文件命名規(guī)范
- Activity對應的布局文件命名:
XxxActivity--> activity_xxx.xml
,比如MainActivity.java--> activity_main.xml
- XML中控件命名:控件名界面名作用,例如:tv_homepage_name ,et_login_phone
- 圖片命名,資源文件,控件id命名:activity名稱+功能名稱(背景bg,按鈕bt,圖片控件iv等)+自己名稱
- RecyclerView / ListView中的item布局文件命名規(guī)范:以item_list作為前綴,以頁面名稱作為中綴,以列表描述作為后綴。具體:"item_list_"+頁面名稱+列表描述,例如:item_list_login_users.xml
- Dialog布局文件命名規(guī)范:以dialog作為前綴,如果是通用的dialog則以common作為中綴以功能描述作為后綴。如果是對應頁面定制的dialog,以頁面描述作為中綴,dialog描述作為后綴。
具體:
通用的dialog:dialog+common+功能描述,例如dialog_common_hint.xml
指定頁面的dialog:dialog+頁面名稱+功能描述,例如dialog_login_pwd_error.xml
values下文件命名
strings.xml
直接以對應的內(nèi)容的英文單詞組合命名.例如:
<string name="buy_ticket">購票</string>
<string name="region_list">景區(qū)列表</string>
colors.xml
具體:頁面+"_"+描述+顏色名稱,例如:
登錄頁面登錄按鈕字體顏色
<!--登錄頁面登錄按鈕字體顏色 -->
<color name="login_activity_login_btn_text">#000000</color>
當然還有一些APP主題色,規(guī)范為:common_描述 ,例如:
<!--通用的item字體顏色 -->
<color name="common_item_text">#33AACC</color>
dimens.xml文件命名
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>
drawable目錄下資源文件命名規(guī)范:
selector文件
以selector作為前綴,以某個頁面的作為中綴如果是多個頁面就以模塊名稱作為中綴或者是項目通用的就以common作為中綴,以功能描述作為后綴。
具體:
selector+頁面名稱+功能描述
selector+模塊名稱+功能描述
selector+common+功能描述
例如:
登陸頁面的確認按鈕:selector_login_confirm_btn.xml(login為頁面名稱)
所有支付模塊購買的按鈕:selector_pay_buy_btn.xml(buy為模塊名稱)
所有通用按鈕的背景:selector_common_btn_bg.xml
shape圖形
以shape 作為前綴,如果是通用的以common作為中綴,如果是單獨頁面的以頁面名稱作為中綴,或者以模塊名稱作為中綴,以功能描述作為后綴。
具體形式和selector一樣。
圖片資源
圖片資源命名規(guī)范 全部小寫,采用下劃線命名法,加前綴區(qū)分 命名模式:可加后綴 _small 表示小圖, _big 表示大圖,邏輯名稱可由多個單詞加下劃線組成,采用以下規(guī)則:
用途_模塊名_邏輯名稱
用途_模塊名_顏色
用途_邏輯名稱
用途_顏色
icon圖片資源以ic開頭;
具體: 前綴+""+頁面名稱+""+描述 (如果頁面和描述一致的則不用重復)
歡迎頁面背景圖 bg_welcome.png
登錄頁面 登錄按鈕背景 bg_login_btn.png
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 白色分割線
anim目錄
全部小寫,采用下劃線命名法,加前綴區(qū)分。具體動畫采用以下規(guī)則:
模塊名_邏輯名稱
邏輯名稱
refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml
普通的tween動畫采用如下命名方式:
// 前面為動畫的類型,后面為方向
動畫命名例子 描述
fade_in 淡入
fade_out 淡出
push_down_in 從下方推入
push_down_out 從下方推出
push_left 推向左方
slide_in_from_top 從頭部滑動進入
zoom_enter 變形進入
slide_in 滑動進入
shrink_to_middle 中間縮小
其他注意事項
- 定義類或者接口 首行留空格,末尾不留;其次每個邏輯分區(qū)都要留單行空格(除普通常量定義外)
- 定義類或者接口變量時,請使用基類或者頂層接口定義變量
- 自行控制類、接口、及其成員的訪問權限,盡量縮小訪問權限
- 類如果不是為擴展而設計的請加final修飾符
- 遇到switch語句時,酌情考慮將每個case語句拆分成單個函數(shù)調用
- 接口定義不加“I”前綴,實現(xiàn)添加"impl"后綴,如果有必要請?zhí)峁┠J的實現(xiàn)和其它實現(xiàn) (默認實現(xiàn):Default+接口名+impl,其它實現(xiàn) :具體擴展功能 + 接口 + impl)
- 具有controller功能的類或者接口定義 都以 功能+“manager” 形式定義
- 所有表示層設計的實體定義形式為 : 功能+“model”