Android技術積累:開發規范

來自: http://www.jianshu.com/p/b86f7a2e2c5f

上個月發布了Android項目重構的三篇系列文章,其中, 界面篇 中提到了在項目中保持規范性的重要性,也有簡單舉了幾個例子。這篇文章則將其延伸,提供更完整的開發規范說明。

書寫規范

1.編碼方式統一用 UTF-8 . Android Studio默認已是 UTF-8 ,只要不去改動它就可以了。

2.縮進統一為 4 個空格,將 Tab size 設置為 4 則可以保證tab鍵按 4 個空格縮進。另外,不要勾選上 Use tab character ,可以保證切換到不同tab長度的環境時還能繼續保持統一的 4 個空格的縮進樣式。

3.花括號不要單獨一行,和它前面的代碼同一行。而且,花括號與前面的代碼之間用一個空格隔開。

public void method() { // Good 

} 

public void method()
{ // Bad
}  

public void method(){ // Bad

}

4.空格的使用

// Good
if (booleanVariable) {
    // TODO while booleanVariable is true
} else {
    // TODO else
}

// Bad
if(booleanVariable) {
    // TODO while booleanVariable is true
}else {
    // TODO else
}

運算符兩邊各用一個空格隔開。

int result = a + b; //Good, = 和 + 兩邊各用一個空格隔開
int result=a+b; //Bad,=和+兩邊沒用空格隔開

方法的每個參數之間用一個空格隔開。

public void method(String param1, String param2); // Good,param1后面的逗號與String之間隔了一個空格
method(param1, param2); // Good,方法調用時,param1后面的逗號與param2之間隔了一個空格
method(param1,param2); // Bad,沒有用一個空格隔開

5.空行的使用

將邏輯相關的代碼段用空行隔開,以提高可讀性。空行也只空一行,不要空多行。在以下情況需用一個空行:

  • 兩個方法之間
  • 方法內的兩個邏輯段之間
  • 方法內的局部變量和方法的第一條邏輯語句之間
  • 常量和變量之間

6.當一個表達式無法容納在一行內時,可換行顯示,另起的新行用 8 個空格縮進。

someMethod(longExpression1, longExpression2, longExpression3,  
        longExpression4, longExpression5);

7.一行聲明一個變量,不要一行聲明多個變量,這樣有利于寫注釋。

private String param1; // 參數1
private String param2; // 參數2

8.行寬設置為 100 ,設置格式化時自動斷行到行寬位置。

9.使用快捷鍵進行代碼自動格式化。

  • Windows: CTRL+ALT+L
  • Mac: OPTION+COMMAND+L

10.一個方法最多 不要超過40行 代碼。

11.范圍型的常量用枚舉類定義,而不要直接用整型或字符,這樣可以減少范圍值的有效性檢查。

// 用枚舉類定義,Good
public enum CouponType {
    // 現金券
    @SerializedName("1")
    CASH,

    // 抵用券
    @SerializedName("2")
    DEBIT,

    // 折扣券
    @SerializedName("3")
    DISCOUNT
}

// 用整型定義,Bad
public static final int TYPE_CASH = 1; // 現金券
public static final int TYPE_DEBIT = 2; // 抵扣券
public static final int TYPE_DISCOUNT = 3; // 折扣券

12.文字大小的單位統一用 sp ,元素大小的單位統一用 dp 。

13.應用中的字符串統一在 strings.xml 中定義,然后在代碼和布局文件中引用。

14.顏色值統一在 colors.xml 中定義,然后在代碼和布局文件中引用。另外,不要在代碼和布局文件中引用系統的顏色,除了透明。

命名規范

1.包命名

域名反寫+項目名稱+模塊名稱 ,全部單詞用小寫字母。

例如,我的KAndroid項目的 Model 模塊包名如下:

me.keeganlee.kandroid.model

2.類和接口命名

使用大駝峰規則,用名詞或名詞詞組命名,每個單詞的首字母大寫。以下為幾種常用類的命名:

  • activity 類,命名以 Activity 為后綴,如:LoginActivity
  • fragment 類,命名以 Fragment 為后綴,如:ShareDialogFragment
  • service 類,命名以 Service 為后綴,如:DownloadService
  • adapter 類,命名以 Adapter 為后綴,如:CouponListAdapter
  • 工具類,命名以 Util 為后綴,如:EncryptUtil
  • 模型類,命名以 BO 為后綴,如:CouponBO
  • 接口實現類,命名以 Impl 為后綴,如:ApiImpl

3.方法命名

使用小駝峰規則,用動詞命名,第一個單詞的首字母小寫,其他單詞的首字母大寫。以下為幾種常用方法的命名:

  • 初始化方法,命名以 init 開頭,例:initView
  • 按鈕點擊方法,命名以 to 開頭,例:toLogin
  • 設置方法,命名以 set 開頭,例:setData
  • 具有返回值的獲取方法,命名以 get 開頭,例:getData
  • 通過異步加載數據的方法,命名以 load 開頭,例:loadData
  • 布爾型的判斷方法,命名以 is 或 has ,或具有邏輯意義的單詞如equals,例:isEmpty

4.控件縮寫

5.常量命名

全部為大寫單詞,單詞之間用下劃線分開。

public final static int PAGE_SIZE = 20;

6.變量命名

{范圍描述+}意義描述+類型描述 的組合,用駝峰式,首字母小寫。

private TextView headerTitleTxt; // 標題欄的標題
private Button loginBtn; // 登錄按鈕
private CouponBO couponBO; // 券實例

7.控件id命名

控件縮寫_{范圍_}意義 ,范圍可選,只在有明確定義的范圍內才需要加上。

<!-- 這是標題欄的標題 -->
<TextView
    android:id="@+id/txt_header_title"
    ... />

<!-- 這是登錄按鈕 -->
<Button
    android:id="@+id/btn_login"
    ... />

8.layout命名

組件類型_{范圍_}功能 ,范圍可選,只在有明確定義的范圍內才需要加上。

以下為幾種常用的組件類型命名:

  • activity_{范圍_}功能 ,為 Activity 的命名格式
  • fragment_{范圍_}功能 ,為 Fragment 的命名格式
  • dialog_{范圍_}功能 ,為 Dialog 的命名格式
  • item_list_{范圍_}功能 ,為 ListView 的 item 命名格式
  • item_grid_{范圍_}功能 ,為 GridView 的 item 命名格式
  • header_list_{范圍_}功能 ,為 ListView 的 HeaderView 命名格式
  • footer_list_{范圍_}功能 ,為 ListView 的 FooterView 命名格式

9.strings的命名

類型_{范圍_}功能 ,范圍可選。以下為幾種常用的命名:

  • 頁面標題,命名格式為: title_頁面
  • 按鈕文字,命名格式為: btn_按鈕事件
  • 標簽文字,命名格式為: label_標簽文字
  • 選項卡文字,命名格式為: tab_選項卡文字
  • 消息框文字,命名格式為: toast_消息
  • 編輯框的提示文字,命名格式為: hint_提示信息
  • 圖片的描述文字,命名格式為: desc_圖片文字
  • 對話框的文字,命名格式為: dialog_文字
  • menu的item文字,命名格式為: action_文字

10.colors的命名

前綴{_控件}{_范圍}{_后綴} ,控件、范圍、后綴可選,但控件和范圍至少要有一個。

  • 背景顏色,添加 bg 前綴
  • 文本顏色,添加 text 前綴
  • 分割線顏色,添加 div 前綴
  • 區分狀態時,默認狀態的顏色,添加 normal 后綴
  • 區分狀態時,按下時的顏色,添加 pressed 后綴
  • 區分狀態時,選中時的顏色,添加 selected 后綴
  • 區分狀態時,不可用時的顏色,添加 disable 后綴

11.drawable的命名

前綴{_控件}{_范圍}{_后綴} ,控件、范圍、后綴可選,但控件和范圍至少要有一個。

  • 圖標類,添加 ic 前綴
  • 背景類,添加 bg 前綴
  • 分隔類,添加 div 前綴
  • 默認類,添加 def 前綴
  • 區分狀態時,默認狀態,添加 normal 后綴
  • 區分狀態時,按下時的狀態,添加 pressed 后綴
  • 區分狀態時,選中時的狀態,添加 selected 后綴
  • 區分狀態時,不可用時的狀態,添加 disable 后綴
  • 多種狀態的,添加 selector 后綴(一般為ListView的 selector 或按鈕的 selector )

12.動畫文件命名

動畫類型_動畫方向 。

  • fade_in ,淡入
  • fade_out ,淡出
  • push_down_in ,從下方推入
  • push_down_out ,從下方推出
  • slide_in_from_top ,從頭部滑動進入
  • zoom_enter ,變形進入
  • shrink_to_middle ,中間縮小

注釋規范

1.文件頭注釋

文件頂部統一添加版權聲明,聲明的格式如下:

/**
 * Copyright (c) 2015. Keegan小鋼 Inc. All rights reserved.
 */

2.類和接口注釋

類和接口統一添加javadoc注釋,格式如下:

/**
 * 類或接口的描述信息
 *
 * @author ${USER}
 * @date ${DATE}
 */

3.方法注釋

下面幾種方法,都必須添加javadoc注釋,說明該方法的用途和參數說明,以及返回值的說明。

  • 接口中定義的所有方法
  • 抽象類中自定義的抽象方法
  • 抽象父類的自定義公用方法
  • 工具類的公用方法
**
 * 登錄
 *
 * @param loginName 登錄名
 * @param password  密碼
 * @param listener  回調監聽器
 */
public void login(String loginName, String password, ActionCallbackListener<Void> listener);

4.變量和常量注釋

下面幾種情況下的常量和變量,都要添加注釋說明,優先采用 右側// 來注釋,若注釋說明太長則在上方添加注釋。

  • 接口中定義的所有常量
  • 公有類的公有常量
  • 枚舉類定義的所有枚舉常量
  • 實體類的所有屬性變量
public static final int TYPE_CASH = 1; // 現金券
public static final int TYPE_DEBIT = 2; // 抵扣券
public static final int TYPE_DISCOUNT = 3; // 折扣券

private int id;                // 券id
private String name;           // 券名稱
private String introduce;      // 券簡介

結束語

這份開發規范說明比較細,也許還不是非常完整,但里面提到的每一條規范都很有用。按照此規范嚴格執行,將大大提高代碼的可讀性和維護性。

 本文由用戶 WesleyEGVP 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!