明名約定
1. 對所有標(biāo)識符都通用的規(guī)則
標(biāo)識符只能使用ASCII字母和數(shù)字砾省,因此每個有效的標(biāo)識符名稱都能匹配正則表達(dá)式\w+。
2. 標(biāo)識符類型的規(guī)則
- 包名
包名全部小寫筹裕,連續(xù)的單詞只是簡單地連接起來,不使用下劃線。
采用反域名命名規(guī)則沙热,全部使用小寫字母。一級包名為com罢缸,二級包名為xx(公司名稱)篙贸,三級包名(平臺),四級包名(項目)枫疆,五級包名(模塊名稱或者層級名稱)爵川。
此包中包含
頁面用到的Activity類 (activitie層級名用戶界面層)
com.xx.應(yīng)用名稱縮寫.activity
基礎(chǔ)共享的類
com.xx.應(yīng)用名稱縮寫.base
頁面用到的Adapter類 (適配器的類)
com.xx.應(yīng)用名稱縮寫.adapter
頁面用到的Adapter類 (適配器的類)
公共工具方法類(util模塊名)
com.xx.應(yīng)用名稱縮寫.util
JavaBean類
com.xx.應(yīng)用名稱縮寫.bean
模型類
com.xx.應(yīng)用名稱縮寫.model
數(shù)據(jù)庫操作類
com.xx.應(yīng)用名稱縮寫.db
自定義的View類等
com.xx.應(yīng)用名稱縮寫.view (或者 com.xx.應(yīng)用名稱縮寫.widget )
Service服務(wù)
com.xx.應(yīng)用名稱縮寫.service
BroadcastReceiver服務(wù)
com.xx.應(yīng)用名稱縮寫.receiver
注意:
如果項目采用MVP,所有M养铸、V雁芙、P抽取出來的接口都放置在相應(yīng)模塊的i包下,所有的實現(xiàn)都放置在相應(yīng)模塊的impl下
- 類名
類名都以UpperCamelCase風(fēng)格編寫钞螟。
類名通常是名詞或名詞短語兔甘,接口名稱有時可能是形容詞或形容詞短語。現(xiàn)在還沒有特定的規(guī)則或行之有效的約定來命名注解類型鳞滨。
名詞洞焙,采用大駝峰命名法,盡量避免縮寫拯啦,除非該縮寫是眾所周知的澡匪, 比如HTML,URL,如果類名稱中包含單詞縮寫褒链,則單詞縮寫的每個字母均應(yīng)大寫唁情。
例如
Activity 類
Activity為后綴標(biāo)識
歡迎頁面類WelcomeActivity
Adapter類
Adapter 為后綴標(biāo)識
新聞詳情適配器 NewDetailAdapter
解析類
Parser為后綴標(biāo)識
首頁解析類HomePosterParser
工具方法類
Util或Manager為后綴標(biāo)識(與系統(tǒng)或第三方的Utils區(qū)分)或功能+Util
線程池管理類:ThreadPoolManager
日志工具類:LogUtil(Logger也可)
打印工具類:PrinterUtil
數(shù)據(jù)庫類
以DBHelper后綴標(biāo)識
新聞數(shù)據(jù)庫:NewDBHelper
Service類
以Service為后綴標(biāo)識
時間服務(wù)TimeServiceBroadcast
Receiver類
以Receiver為后綴標(biāo)識
推送接收J(rèn)PushReceiver
ContentProvider
以Provider為后綴標(biāo)識
自定義的共享基礎(chǔ)類
以Base開頭
BaseActivity,BaseFragment
測試類
以它要測試的類的名稱開始,以Test結(jié)束甫匹。
例如:HashTest 或 HashIntegrationTest甸鸟。
抽象類
用 Abstract 做為類命名的開頭
接口(interface)
命名規(guī)則與類一樣采用大駝峰命名法,多以
able或ible結(jié)尾兵迅,如
interface Runnable
interface Accessible
接口實現(xiàn)類
在類的后面加上 Impl 如:
interface Container
class ContainerImpl
注意:
如果項目采用MVP抢韭,所有Model、View恍箭、Presenter的接口都以I為前綴刻恭,不加后綴,其他的接口采用上述命名規(guī)則扯夭。
- 方法名
方法名都以 LowerCamelCase 風(fēng)格編寫鳍贾。
方法名通常是動詞或動詞短語。
初始化相關(guān)方法,使用init為前綴標(biāo)識交洗,如初始化布局initView()
initXX()
方法返回值為boolean型的請使用is或check為前綴標(biāo)識
isXX() checkXX()
返回某個值的方法贾漏,使用get為前綴標(biāo)識
getXX()
對數(shù)據(jù)進(jìn)行處理的方法,盡量使用handle為前綴標(biāo)識
handleXX()
彈出提示框和提示信息藕筋,使用display/show為前綴標(biāo)識
displayXX()/showXX()
與保存數(shù)據(jù)相關(guān)的纵散,使用save為前綴標(biāo)識
saveXX()
對數(shù)據(jù)重組的,使用reset前綴標(biāo)識
resetXX()
清除數(shù)據(jù)相關(guān)的
clearXX()
清除數(shù)據(jù)相關(guān)的
removeXXX()
繪制數(shù)據(jù)或效果相關(guān)的隐圾,使用draw前綴標(biāo)識
drawXXX()
下劃線可能出現(xiàn)在JUnit測試方法名稱中用以分隔名稱的邏輯組件伍掀。一個典型的模式是:test_,例如testPop_emptyStack暇藏。
并不存在唯一正確的方式來命名測試方法蜜笤。
- 常量名
常量名命名模式為CONSTANT_CASE,全部字母大寫盐碱,用下劃線分隔單詞把兔。那沪伙,到底什么算是一個常量?
每個常量都是一個靜態(tài)final字段县好,但不是所有靜態(tài)final字段都是常量围橡。在決定一個字段是否是一個常量時,考慮它是否真的感覺像是一個常量缕贡。
例如翁授,如果任何一個該實例的觀測狀態(tài)是可變的,則它幾乎肯定不會是一個常量晾咪。只是永遠(yuǎn)不打算改變對象一般是不夠的收擦,它要真的一直不變才能將它示為常量。
// Constants
static final int NUMBER = 5;
static final ImmutableList NAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
這些名字通常是名詞或名詞短語谍倦。
-
非常量字段名
非常量字段名以LowerCamelCase風(fēng)格的基礎(chǔ)上改造為如下風(fēng)格:基本結(jié)構(gòu)為scopeVariableNameType塞赂,
scope:范圍非公有,非靜態(tài)字段命名以m開頭昼蛀。
靜態(tài)字段命名以s開頭减途。
公有非靜態(tài)字段命名以p開頭。
公有靜態(tài)字段(全局變量)命名以g開頭曹洽。
public static final 字段(常量) 全部大寫鳍置,并用下劃線連起來。
例子:
public class MyClass {
public static final int SOME_CONSTANT = 41;
public int pField;
private static MyClass sSingleton;
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
public static int gField;
}
使用1字符前綴來表示作用范圍送淆,1個字符的前綴必須小寫税产,前綴后面是由表意性強(qiáng)的一個單詞或多個單詞組成的名字,而且每個單詞的首寫字母大寫偷崩,其它字母小寫辟拷,這樣保證了對變量名能夠進(jìn)行正確的斷句。
3. 資源文件命名規(guī)范
- 資源布局文件(XML文件(layout布局文件)):
全部小寫阐斜,采用下劃線命名法
contentview 命名
必須以全部單詞小寫衫冻,單詞間以下劃線分割,使用名詞或名詞詞組谒出。
所有Activity或Fragment的contentView必須與其類名對應(yīng)隅俘,對應(yīng)規(guī)則為:
將所有字母都轉(zhuǎn)為小寫,將類型和功能調(diào)換(也就是后綴變前綴)笤喳。
例如:activity_main.xmlDialog命名:dialog_描述.xml
例如:dialog_hint.xmlPopupWindow命名:ppw_描述.xml
例如:ppw_info.xml列表項命名:item_描述.xml
例如:item_city.xml包含項命名:模塊(位置)描述.xml
例如:activity_main_head.xml为居、activity_main_bottom.xml
注意:通用的包含項命名采用:項目名稱縮寫描述.xml
例如:xxxx_title.xml
- 資源文件(圖片drawable文件夾下):
全部小寫,采用下劃線命名法杀狡,加前綴區(qū)分
命名模式:可加后綴 _small 表示小圖, _big 表示大圖蒙畴,邏輯名稱可由多個單詞加下劃線組成,采用以下規(guī)則:
用途 模塊名 邏輯名稱
用途 模塊名 顏色
用途 邏輯名稱
用途 顏色
說明:用途也指控件類型(具體見UI控件縮寫表)
例如:
btn_main_home.png 按鍵
divider_maket_white.png 分割線
ic_edit.png 圖標(biāo)
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_整體效果(selector)
btn_xx
按鈕圖片使用btn_正常情況效果
btn_xx_normal
按鈕圖片使用btn_點擊時候效果
btn_xx_pressed
state_focused聚焦效果
btn_xx_focused
state_enabled (false)不可用效果
btn_xx_disabled
state_checked選中效果
btn_xx_checked
state_selected選中效果
btn_xx_selected
state_hovered懸停效果
btn_xx_hovered
state_checkable可選效果
btn_xx_checkable
state_activated激活的
btn_xx_activated
背景圖片使用bg_功能_說明
bg_head
默認(rèn)圖片使用def_功能_說明
def_search_cell
圖標(biāo)圖片使用ic_功能_說明
ic_more_help
具有分隔特征的圖片使用seg_功能_說明
seg_list_line
選擇圖標(biāo)使用sel_功能_說明
sel_ok
注意:
使用AndroidStudio的插件SelectorChapek可以快速生成selector呜象,前提是命名要規(guī)范,組件化下各模塊資源文件需要統(tǒng)一加上前綴或者后綴
- 動畫文件(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
從頭部滑動進(jìn)入
slide_in_from_top
變形進(jìn)入
zoom_enter
滑動進(jìn)入
slide_in
中間縮小
shrink_to_middle
- values中name命名
類別
命名
示例
strings
strings的name命名使用下劃線命名法上煤,采用以下規(guī)則:模塊名+邏輯名稱
main_menu_about 主菜單按鍵文字friend_title 好友模塊標(biāo)題欄
friend_dialog_del 好友刪除提示login_check_email 登錄驗證
dialog_title 彈出框標(biāo)題
button_ok 確認(rèn)鍵 loading 加載文字
colors
colors的name命名使用下劃線命名法,采用以下規(guī)則:模塊名+邏輯名稱
顏色
friend_info_bg friend_bg transparent gray
styles
styles的name命名使用 Camel命名法祟绊,采用以下規(guī)則:模塊名+邏輯名稱
main_tabBottom
- layout中的id命名
命名模式為:view縮寫_view的邏輯名稱
使用 AndroidStudio 的插件 ButterKnife Zelezny,生成注解非常方便哥捕。
如果不使用 ButterKnife Zelezny牧抽,則建議使用 view 縮寫做后綴,如:username_tv(展示用戶名的TextView)