包名全部采用小寫(xiě),不用下劃線(xiàn)區(qū)分單詞
主包名采用[公司性質(zhì)].[公司名稱(chēng)].[項(xiàng)目名稱(chēng)]的命名方式
- 例如:翡翠教育做的手機(jī)助手包名edu.feicui.assistant
通用功能子包名采用[主包名].[通用名稱(chēng)]的命名方式
Android中常見(jiàn)命名規(guī)則
包名
包名全部小寫(xiě),連續(xù)的單詞只是簡(jiǎn)單地連接起來(lái),不使用下劃線(xiàn)。
采用反域名命名規(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ǔ)?,F(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 | 線(xiàn)程池管理類(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ě),采用下劃線(xiàn)命名法
contentview 命名
必須以全部單詞小寫(xiě),單詞間以下劃線(xiàn)分割,使用名詞或名詞詞組。
所有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ě),采用下劃線(xiàn)命名法,加前綴區(qū)分
命名模式:可加后綴 small 表示小圖, big 表示大圖,邏輯名稱(chēng)可由多個(gè)單詞加下劃線(xiàn)組成,采用以下規(guī)則:
用途模塊名邏輯名稱(chēng)
用途模塊名顏色
用途邏輯名稱(chēng)
用途顏色
說(shuō)明:用途也指控件類(lèi)型(具體見(jiàn)UI控件縮寫(xiě)表)
| 名稱(chēng) | 命名 |
|---|---|
| btn_main_home.png | 按鍵 |
| divider_maket_white.png | 分割線(xiàn) |
| 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 | 白色分割線(xiàn) |
如果有多種形態(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(主要用于分隔線(xiàn),不僅包括Listview中的divider,還包括普通布局中的線(xiàn)) |
| 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ě)形式,用下劃線(xiàn)區(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)行封裝,直接將成員變量訪(fǎng)問(wèn)修飾符修改為非private,例如:
class User{public String name,pwd;}
16 實(shí)體類(lèi)中固定值的成員變量可設(shè)置成final,并通過(guò)構(gòu)造函數(shù)初始化
17 實(shí)體類(lèi)中不得隨意修改的成員變量可添加下劃線(xiàn)前綴以作區(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ě),各單詞間以下劃線(xiàn)區(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