Android開(kāi)發(fā)規(guī)范文檔

包名全部采用小寫(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)控件前綴如下表:
Paste_Image.png
Paste_Image.png

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)前綴如下表:
Paste_Image.png

23 圖片采用[性質(zhì)前綴][功能模塊] [屬性后綴].[擴(kuò)展名]的方式,

  • 例如:
    主背景圖片bg_main.png
    確定按鈕按下btn_ok_presssed.png
常見(jiàn)屬性后綴如下表:
Paste_Image.png
values目錄下文件名稱(chēng)較固定,不得隨意更改,常見(jiàn)名稱(chēng)如下:
Paste_Image.png

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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,555評(píng)論 19 139
  • Android編碼規(guī)范 源文件基礎(chǔ) 文件名 源文件以其最頂層的類(lèi)名來(lái)命名,大小寫(xiě)敏感,文件擴(kuò)展名為.java。 文...
    呼呼哥閱讀 1,116評(píng)論 0 0
  • 請(qǐng)看完結(jié)版:Android開(kāi)發(fā)規(guī)范(完結(jié)版)
    Blankj閱讀 8,720評(píng)論 25 115
  • 1、引言 數(shù)據(jù)庫(kù)設(shè)計(jì)過(guò)程中表、字段等的命名規(guī)范也算是設(shè)計(jì)規(guī)范的一部分,不過(guò)設(shè)計(jì)規(guī)范更多的是為了確保數(shù)據(jù)庫(kù)設(shè)計(jì)的合理...
    SnowflakeCloud閱讀 41,251評(píng)論 0 48
  • 作者:李旺成 時(shí)間:2016年4月3日 1. 前言 這份文檔參考了 Google Java 編程風(fēng)格規(guī)范和 Goo...
    diygreen閱讀 40,234評(píng)論 19 224

友情鏈接更多精彩內(nèi)容