包名全部采用小寫(xiě)睬捶,不用下劃線區(qū)分單詞
主包名采用[公司性質(zhì)].[公司名稱(chēng)].[項(xiàng)目名稱(chēng)]的命名方式
- 例如:翡翠教育做的手機(jī)助手包名edu.feicui.assistant
通用功能子包名采用[主包名].[通用名稱(chēng)]的命名方式
Android中常見(jiàn)命名規(guī)則
包名
包名全部小寫(xiě),連續(xù)的單詞只是簡(jiǎn)單地連接起來(lái)觉渴,不使用下劃線疆拘。
采用反域名命名規(guī)則哎迄,全部使用小寫(xiě)字母翔烁。一級(jí)包名為com蹬屹,二級(jí)包名為xx(可以是公司或則個(gè)人的隨便)慨默,三級(jí)包名根據(jù)應(yīng)用進(jìn)行命名厦取,四級(jí)包名為模塊名或?qū)蛹?jí)名虾攻。
包名 | 此包中包含 |
---|---|
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).main | 頁(yè)面用到的Activity類(lèi) (activitie層級(jí)名用戶(hù)界面層) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).activity | 頁(yè)面用到的Activity類(lèi) (activitie層級(jí)名用戶(hù)界面層) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).base | 基礎(chǔ)共享的類(lèi) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).adapter | 頁(yè)面用到的Adapter類(lèi) (適配器的類(lèi)) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).util | 此包中包含:公共工具方法類(lèi)(util模塊名) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).bean | 下面可分:vo霎箍、po漂坏、dto 此包中包含:JavaBean類(lèi) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).model | 此包中包含:模型類(lèi) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).db | 數(shù)據(jù)庫(kù)操作類(lèi) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).view(或者 com.xx.應(yīng)用名稱(chēng)縮寫(xiě).widget ) | 自定義的View類(lèi)等 |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).service | Service服務(wù) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).receiver | BroadcastReceiver服務(wù) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).prwd | 首選項(xiàng) |
com.xx.應(yīng)用名稱(chēng)縮寫(xiě).provider | 內(nèi)容提供者 |
類(lèi)名
類(lèi)名都以UpperCamelCase風(fēng)格編寫(xiě)纠亚。
類(lèi)名通常是名詞或名詞短語(yǔ)蒂胞,接口名稱(chēng)有時(shí)可能是形容詞或形容詞短語(yǔ)∑妫現(xiàn)在還沒(méi)有特定的規(guī)則或行之有效的約定來(lái)命名注解類(lèi)型鸿染。
名詞涨椒,采用大駝峰命名法蚕冬,盡量避免縮寫(xiě)囤热,除非該縮寫(xiě)是眾所周知的旁蔼, 比如HTML,URL棺聊,如果類(lèi)名稱(chēng)中包含單詞縮寫(xiě)躺屁,則單詞縮寫(xiě)的每個(gè)字母均應(yīng)大寫(xiě)经宏。
類(lèi) | 描述 | 例如 |
---|---|---|
Activity 類(lèi) | Activity為后綴標(biāo)識(shí) | 歡迎頁(yè)面類(lèi)WelcomeActivity |
Adapter類(lèi) | Adapter 為后綴標(biāo)識(shí) | 新聞詳情適配器 NewDetailAdapter |
解析類(lèi) | Parser為后綴標(biāo)識(shí) | 首頁(yè)解析類(lèi)HomePosterParser |
工具方法類(lèi) | Util或Manager為后綴標(biāo)識(shí)(與系統(tǒng)或第三方的Utils區(qū)分)或功能+Util | 線程池管理類(lèi):ThreadPoolManager日志工具類(lèi):LogUtil(Logger也可)打印工具類(lèi):PrinterUtil |
數(shù)據(jù)庫(kù)類(lèi) | 以DBHelper后綴標(biāo)識(shí) | 新聞數(shù)據(jù)庫(kù):NewDBHelper |
Service類(lèi) | 以Service為后綴標(biāo)識(shí) | 時(shí)間服務(wù)TimeServiceBroadcast |
Receiver類(lèi) | 以Receiver為后綴標(biāo)識(shí) | 推送接收J(rèn)PushReceiver |
ContentProvider | 以Provider為后綴標(biāo)識(shí) | 1 |
自定義的共享基礎(chǔ)類(lèi) | 以Base開(kāi)頭 | BaseActivity,BaseFragment |
方法名
方法名都以 LowerCamelCase 風(fēng)格編寫(xiě)。
方法名通常是動(dòng)詞或動(dòng)詞短語(yǔ)沪斟。
方法 | 說(shuō)明 |
---|---|
initXX() | 初始化相關(guān)方法,使用init為前綴標(biāo)識(shí)择吊,如初始化布局initView() |
isXX() checkXX() | 方法返回值為boolean型的請(qǐng)使用is或check為前綴標(biāo)識(shí) |
getXX() | 返回某個(gè)值的方法几睛,使用get為前綴標(biāo)識(shí) |
handleXX() | 對(duì)數(shù)據(jù)進(jìn)行處理的方法所森,盡量使用handle為前綴標(biāo)識(shí) |
displayXX()/showXX() | 彈出提示框和提示信息焕济,使用display/show為前綴標(biāo)識(shí) |
saveXX() | 與保存數(shù)據(jù)相關(guān)的晴弃,使用save為前綴標(biāo)識(shí) |
resetXX() | 對(duì)數(shù)據(jù)重組的肝匆,使用reset前綴標(biāo)識(shí) |
clearXX() | 清除數(shù)據(jù)相關(guān)的 |
removeXXX() | 清除數(shù)據(jù)相關(guān)的 |
drawXXX() | 繪制數(shù)據(jù)或效果相關(guān)的旗国,使用draw前綴標(biāo)識(shí) |
量詞列表 | 量詞后綴說(shuō)明 |
---|---|
First | 一組變量中的第一個(gè) |
Last | 一組變量中的最后一個(gè) |
Next | 一組變量中的下一個(gè)變量 |
Prev | 一組變量中的上一個(gè) |
Cur | 一組變量中的當(dāng)前變量能曾。 |
資源文件命名規(guī)范
資源布局文件(XML文件(layout布局文件)):
全部小寫(xiě)寿冕,采用下劃線命名法
contentview 命名
必須以全部單詞小寫(xiě)驼唱,單詞間以下劃線分割玫恳,使用名詞或名詞詞組京办。
所有Activity或Fragment的contentView必須與其類(lèi)名對(duì)應(yīng)惭婿,對(duì)應(yīng)規(guī)則為:
將所有字母都轉(zhuǎn)為小寫(xiě)换吧,將類(lèi)型和功能調(diào)換(也就是后綴變前綴)式散。
名稱(chēng) | 描述 | 命名 |
---|---|---|
Dialog | dialog_描述.xml | dialog_hint.xml |
PopupWindow | ppw_描述.xml | ppw_info.xml |
列表項(xiàng) | item_描述.xml | item_city.xml |
包含項(xiàng) | 模塊_(位置)描述.xml | activity_main_head.xml暴拄、activity_main_bottom.xml |
UI控件縮寫(xiě)表
控件 | 縮寫(xiě) | 例子 |
---|---|---|
LinearLayout | ll | llFriend或者mFriendLL |
RelativeLayout | rl | rlMessage或mMessageRL |
FrameLayout | fl | flCart或mCartFL |
TableLayout | tl | tlTab或mTabTL |
Button | btn | btnHome或mHomeBtn |
ImageButton | ibtn | btnPlay或mPlayIBtn |
TextView | tv | tvName或mNameTV |
EditText | et | etName或mNameET |
ListView | lv | lvCart或mCartLV |
ImageView | iv | ivHead或mHeadIV |
GridView | gv | gvPhoto或mPhotoGV |
資源文件(圖片drawable文件夾下):
全部小寫(xiě)乖篷,采用下劃線命名法撕蔼,加前綴區(qū)分
命名模式:可加后綴 small 表示小圖, big 表示大圖鲸沮,邏輯名稱(chēng)可由多個(gè)單詞加下劃線組成讼溺,采用以下規(guī)則:
用途模塊名邏輯名稱(chēng)
用途模塊名顏色
用途邏輯名稱(chēng)
用途顏色
說(shuō)明:用途也指控件類(lèi)型(具體見(jiàn)UI控件縮寫(xiě)表)
名稱(chēng) | 命名 |
---|---|
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_正常情況效果 | btn_xx_normal |
按鈕圖片使用btn_點(diǎn)擊時(shí)候效果 | 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 |
state_window_focused | btn_xx_windowfocused |
背景圖片使用bg_功能_說(shuō)明 | bg_head |
默認(rèn)圖片使用def_功能_說(shuō)明 | def_search_cell |
圖標(biāo)圖片使用ic_功能_說(shuō)明 | ic_more_help |
具有分隔特征的圖片使用seg_功能_說(shuō)明 | seg_list_line |
選擇圖標(biāo)使用sel_功能_說(shuō)明 | sel_ok |
常見(jiàn)的英文單詞縮寫(xiě):
名稱(chēng) | 縮寫(xiě) |
---|---|
icon | ic (主要用在app的圖標(biāo)) |
color | cl(主要用于顏色值) |
divider | di(主要用于分隔線,不僅包括Listview中的divider藻懒,還包括普通布局中的線) |
selector | sl(主要用于某一view多種狀態(tài)嬉荆,不僅包括Listview中的selector,還包括按鈕的selector) |
average | avg |
background | bg(主要用于布局和子布局的背景) |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
infomation | info |
initial | init |
image | img |
length | len |
library | lib |
message | msg |
password | pwd |
position | pos |
server | srv |
string | str |
temp | tmp |
window | wnd(win) |
一般功能子包名采用[主包名].[模塊名稱(chēng)].[子模塊名稱(chēng)]的命名方式。
- 例如:手機(jī)助手的鬧鐘模塊包名 edu.feicui.assistant.alarm
只需導(dǎo)入用到的類(lèi)陆爽,不得用*導(dǎo)入包下所有類(lèi)
導(dǎo)入類(lèi)時(shí),系統(tǒng)類(lèi)在上方,自定義類(lèi)在下方
1 代碼主要采用大/小駝峰命名法驴剔,即除首字母外丧失,每個(gè)單詞首字母大寫(xiě)布讹,整體首字母大小根據(jù)其它規(guī)范決定
2 類(lèi)名描验、接口名膘流、枚舉名等首字母大寫(xiě)呼股,若由多個(gè)單詞組成画恰,則其后每個(gè)單詞首字母大寫(xiě)允扇,例如:
class ConfigManager{}
3 類(lèi)名蔼两、接口名、枚舉名等首字母大寫(xiě)妙啃,若由多個(gè)單詞組成揖赴,則其后每個(gè)單詞首字母大寫(xiě)燥滑,例如:
class ConfigManager{}
4 繼承自安卓組件的類(lèi)铭拧,采用父類(lèi)名作為后綴搀菩,例如:
class LoginActivity extends Activity{}
5 自定義異常必須以Exception結(jié)尾
6 除for循環(huán)變量外,一律不得使用i歧蒋、j谜洽、k等單字符作為變量名
7 定義數(shù)組時(shí)方括號(hào)緊隨在原始類(lèi)型之后阐虚,數(shù)組名稱(chēng)一般使用復(fù)數(shù)形式晤郑,
- 例如:int[] arrays;
8 常量造寝、枚舉等均采用大寫(xiě)形式诫龙,用下劃線區(qū)分各單詞签赃,
- 例如:final static int DIALOG_ID_ALARM = 1;
enum Season{SPRING, SUMMER, AUTUMN, WINTER};
9 全局變量添加所有者前綴:實(shí)例成員變量前綴m(表示member)锦聊,類(lèi)靜態(tài)變量前綴s(表示static)孔庭,
- 例如:實(shí)例變量mRun
類(lèi)靜態(tài)變量sInstance
10 控件變量添加組件前綴圆到,順序在所有者前綴之后芽淡,
- 例如:全局名稱(chēng)mBtnNext
局部名稱(chēng)btnNext
常見(jiàn)控件前綴如下表:
11 除單例模式外一般不得使用靜態(tài)變量
12 常量一般使用final static修飾富稻,根據(jù)需要使用可見(jiàn)性修飾符唉窃,例如:
public static final int VISIBLE = 0x00000000;
13 一般方法名首字母小寫(xiě)纹份,若由多個(gè)單詞組成蔓涧,則其后每個(gè)單詞首字母大寫(xiě)
14 構(gòu)造方法采用遞增方式(參數(shù)多的寫(xiě)在后面)
- 例如:
public GameView(Context context) {
this(context, null);
}
public GameView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public GameView(Context context, AttributeSet attrs, int defStyle) {}
15 僅在項(xiàng)目?jī)?nèi)使用的實(shí)體類(lèi)不使用JavaBean進(jìn)行封裝元暴,直接將成員變量訪問(wèn)修飾符修改為非private,例如:
class User{public String name,pwd;}
16 實(shí)體類(lèi)中固定值的成員變量可設(shè)置成final茉盏,并通過(guò)構(gòu)造函數(shù)初始化
17 實(shí)體類(lèi)中不得隨意修改的成員變量可添加下劃線前綴以作區(qū)別,例如:
class User{public int _id;}
18 一般不使用System.out輸出鸠姨,而是使用Log中的方法
19 使用BuildConfig.DEBUG標(biāo)記對(duì)Log進(jìn)行封裝讶迁,只在調(diào)試時(shí)輸出重要信息巍糯,正式版不輸出
20 一般try……catch只捕獲需要的異常,catch塊不得為空祟峦,至少應(yīng)當(dāng)將異常信息輸出
21 資源命名全部采用小寫(xiě)宅楞,各單詞間以下劃線區(qū)分
22 布局文件采用[前綴]_[功能模塊].xml的命名方式疆偿,
- 例如:
MainActivity的布局activity_main.xml]
常見(jiàn)前綴如下表:
23 圖片采用[性質(zhì)前綴][功能模塊] [屬性后綴].[擴(kuò)展名]的方式迅箩,
- 例如:
主背景圖片bg_main.png
確定按鈕按下btn_ok_presssed.png
常見(jiàn)屬性后綴如下表:
values目錄下文件名稱(chēng)較固定处铛,不得隨意更改饲趋,常見(jiàn)名稱(chēng)如下:
1開(kāi)源項(xiàng)目必須添加文件注釋?zhuān)情_(kāi)源項(xiàng)目建議添加拐揭,例如:
/*
* @(#): Document.java
* @project:IndentObjectNatation
* @version: v1.1
* @copyright: Copyright (C) 2013-2014 The Emerald Education
* @description:
* This file is a part of Indent Object Notation project.
*
* @modify:
* ---- No.1 Modified By Mr. Tang At 2014-05-06 11:32 Based On 1.0 ----
* Create this file.
* ---- No.2 Modified By Mr. Zhang At 2014-05-06 11:32 Based On 1.0 ----
* Make the class Document extend from the class Node.
*/
2類(lèi)定義一般需要寫(xiě)類(lèi)注釋?zhuān)涌谝话阈枰獙?xiě)接口注釋?zhuān)绻麤](méi)有文件注釋?zhuān)瑒t需要在類(lèi)注釋和接口注釋中標(biāo)出作者,例如:
/**
* Root of the ION tree, provides the access to the document's data.
* <p>
* Subclass of {@link Node}, Since elements, comments, etc. cannot exist
* outside the context of a Document, the Document also contains the
* factory methods needed to create these objects.
* </p>
*
* @author Mr. Zhang
*/
class Document {}
3成員變量奕塑、靜態(tài)變量堂污、常量等添加屬性注釋?zhuān)纾?/p>
/** This view is invisible. */
public static final int INVISIBLE = 0x00000004;
4關(guān)聯(lián)性較大的多個(gè)成員變量等可以共用同一條注釋?zhuān)纾?/p>
/** The width and height of View. */
private int mWidth, mHeight;
5public和protected方法必須添加方法注釋?zhuān)琩efault和private方法建議添加方法注釋?zhuān)纾?/p>
/**
* Writes {@code count} characters starting at {@code offset} in {@code buf}
* to the target.
*
* @param buf
* the non-null character array to write.
* @param offset
* the index of the first character in {@code buf} to write.
* @param count
* the maximum number of characters to write.
* @return {@code true} if success, otherwise {@code false}
* @throws IndexOutOfBoundsException
* if {@code offset < 0} or {@code count < 0}, or if {@code
* offset + count} is greater than the size of {@code buf}.
* @throws IOException
* if this writer is closed or another I/O error occurs.
*/
public abstract boolean write(char[] buf, int offset, int count) throws IndexOutOfBoundsException, IOException;
6若覆蓋基類(lèi)的方法,則可以不寫(xiě)方法注釋?zhuān)仨氂聾Override標(biāo)出龄砰,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {}
7不建議繼續(xù)使用的方法用@Deprecated標(biāo)出
8switch……case的每個(gè)條件一般添加簡(jiǎn)短說(shuō)明盟猖,例如:
switch (type) {
case 1:// Android apps
break;
case 2:// Android games
break;
case 3:// iOS apps
break;
default:// Not a valid package
break;
}
9 如果if的條件大于2個(gè)固蚤,則必須寫(xiě)注釋?zhuān)纾?/p>
if (isBluetooth // If Bluetooth network is on
|| isWifi // If WLAN network is on
|| is3g // if 3g network is on
) {}
10 對(duì)于未完成的方法你弦,使用TODO加以標(biāo)記,例如:
void write(byte[] buf, File file) {
// TODO: Write buf to file
}
11 若功能已完成,但存在效率等潛在問(wèn)題時(shí)狸捅,使用XXX加以標(biāo)記斋陪,例如:
void parseXML(File file) {
// XXX: Maybe SAX is better
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(file);
}
12 若代碼存在嚴(yán)重問(wèn)題或僅用于調(diào)試缔赠,使用FIXME加以標(biāo)記(注:存在FIXME標(biāo)記的代碼不能作為正式版發(fā)布)
boolean login(String name, String pwd) {
//FIXME: Remove this line before publishing
System.out.println("name=" + name + ", password=" + pwd);
if (users.containsKey(name) && users.get(name).equals(pwd))
return true;
return false;
}
13 如果for踢匣、while等代碼塊過(guò)長(zhǎng)后专,可以在結(jié)尾處標(biāo)記循環(huán)變量,例如:
for (int position = 0; position < 10; position++) {
……
}// end for: position
while(mRun){
……
}// end while: mRun