Android 宝典:代码规范与命名规范
博主聲明:
轉載請在開頭附加本文鏈接及作者信息,并標記為轉載。本文由博主?威威喵?原創,請多支持與指教。
本文首發于此? ?博主:威威喵??|??博客主頁:https://blog.csdn.net/smile_running
-
書寫規范
1. 編碼方式統一用UTF-8. Android Studio默認已是UTF-8,只要不去改動它就可以了。
2. 縮進統一為4個空格,將Tab size設置為4則可以保證tab鍵按4個空格縮進。另外,不要勾選上Use tab character,可以保證切換到不同tab長度的環境時還能繼續保持統一的4個空格的縮進樣式。
3. 花括號不要單獨一行,和它前面的代碼同一行。而且,花括號與前面的代碼之間用一個空格隔開。空方法允許花括號和方法名占同一行。
4. 空格的使用
if、else、for、switch、while等邏輯關鍵字與后面的語句留一個空格隔開。
// Good if (booleanVariable) {// TODO while booleanVariable is true } else {// TODO else }// Bad if(booleanVariable) {// TODO while booleanVariable is true }else {// TODO else }運算符兩邊各用一個空格隔開。
方法的每個參數之間用一個空格隔開。
public void method(String param1, String param2); // Good,param1后面的逗號與String之間隔了一個空格 method(param1, param2); // Good,方法調用時,param1后面的逗號與param2之間隔了一個空格 method(param1,param2); // Bad,沒有用一個空格隔開5. 空行的使用
將邏輯相關的代碼段用空行隔開,以提高可讀性。空行也只空一行,不要空多行。在以下情況需用一個空行:
- 兩個方法之間
- 方法內的兩個邏輯段之間
- 方法內的局部變量和方法的第一條邏輯語句之間
- 常量和變量之間
6. 當一個表達式無法容納在一行內時,可換行顯示,另起的新行用8個空格縮進。
7. 一行聲明一個變量,不要一行聲明多個變量,這樣有利于寫注釋。
private String param1; // 參數1 private String param2; // 參數28. 行寬設置為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. 包命名
域名反寫+項目名稱+模塊名稱,全部單詞用小寫字母。例如,機器人項目的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. 控件縮寫
| 控件 | 縮寫 | 控件 | 縮寫 |
| TextView | txt | EditText | edt |
| Button | btn | ImageButton | imgbtn |
| ImageView | imgv | ListView | listv |
| RadioGroup | rgroup | RadioButton | rbtn |
| ProgressBar | proBar | SeekBar | skBar |
| CheckBox | chk | Spinner | spn |
| TableLayout | table | TableRow | row |
| LinearLayout | llayout | RelativeLayout | rlayout |
| ScrollView | scroll | SearchView | search |
| TabHost | host | TabWidget | widget |
| ZoomControl | zmCtl | VideoView | vdoVi |
| AutoCompleteTextView | autoTxt | WebView | webv |
| TimePicker | tmPk | toggleButton | tglBtn |
| toggleButton | tglBtn | GridView | gv |
| RecyclerView | recyv | ? | ? |
5. 常量命名
全部為大寫單詞,單詞之間用下劃線分開。
6. 變量命名
{范圍描述+}意義描述+類型描述的組合,用駝峰式,首字母小寫。
1.私有成員變量加前綴 m
2.臨時變量加前綴 _
3.參數前綴加 ?p (不強制要求)
7. 控件id命名
控件縮寫_{范圍_}意義,范圍可選,只在有明確定義的范圍內才需要加上。
<!-- 這是標題欄的標題 --> <TextViewandroid:id="@+id/txt_header_title"... /><!-- 這是登錄按鈕 --> <Buttonandroid:id="@+id/btn_login"... />8. layout命名
組件類型_{范圍_}功能,范圍可選,只在有明確定義的范圍內才需要加上。以下為幾種常用的組件類型命名:
- activity_{范圍_}功能,為Activity的命名格式
- fragment_{范圍_}功能,為Fragment的命名格式
- dialog_{范圍_}功能,為Dialog的命名格式
- item_list_{范圍_}功能,為ListView的item命名格式
- item_recy_{范圍_}功能,為RecyclerView的item命名格式
- item_grid_{范圍_}功能,為GridView的item命名格式
- header_list_{范圍_}功能,為ListView的HeaderView命名格式
- footer_list_{范圍_}功能,為ListView的FooterView命名格式
9. strings和 dimens的命名
非共有類型:{模塊描述}_{視圖類型}_{業務描述}_{后綴}
共有功能類型:{業務功能}_{視圖類型}_{業務描述}_{后綴}
后綴:_normal,_pressed,_selected,_selector,_disable……
表示登錄頁面中的密碼輸入框的提示文本<string name="login_et_password_hint">請輸入密碼</string>表示登錄頁面中的密碼輸入框的默認顯示密碼為123456,<string name="login_et_password_text">123456</string>訂單列表中的確認收貨按鈕的文本<string name="order_list_item_btn_confirmreceipt">確認收貨</string>訂單列表中的確認收貨按鈕被按下時候的文本<string name="order_list_item_btn_confirmreceipt_pressed">確認收貨</string>order 表示視圖功能描述,list_item_btn 是視圖類型,confirmreceipt 是業務描述
- 頁面標題,命名格式為:home_activity_title???
- 按鈕文字,命名格式為:?login_btn_txt
- 標簽文字,命名格式為:order_lable_goods_price
- 選項卡文字,命名格式為:home_tab_mine
- 消息框文字,命名格式為:home_toast_retry_connect
- 編輯框的提示文字,命名格式為:login_et_hint
- 對話框的文字,命名格式為:softupdate_dialog_title
- menu的item文字,命名格式為:home_menu
10. colors的命名
非共有類型:{前綴}_{模塊描述}_{視圖類型}_{業務描述}_{后綴}
共有功能類型:{業務功能}_{視圖類型}_{業務描述}_{后綴}
前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。
<!--主頁的home子頁面的標題欄背景顏色--><color name="main_home_titlebar">@color/red</color><color name="main_home_titlebar_bg">@color/red</color><!--主頁的發現子頁面的確認按鈕的背景顏色--><color name="main_find_btn_confirm">@color/red</color><!--主頁的發現子頁面的確認按鈕的文本顏色--><color name="main_find_btn_confirm_text">@color/blue</color><!--主頁的發現子頁面的確認按鈕被按下的時候的背景顏色--><color name="main_find_btn_confirm_bg_pressed">@color/red</color><!--主頁的發現子頁面的確認按鈕被按下的時候的文本顏色--><color name="main_find_btn_confirm_text_pressed">@color/blue</color>- 區分狀態時,默認狀態的顏色,添加normal后綴
- 區分狀態時,按下時的顏色,添加pressed后綴
- 區分狀態時,選中時的顏色,添加selected后綴
- 區分狀態時,不可用時的顏色,添加disable后綴
11. drawable的命名
前綴{_控件}{_范圍}{_后綴},控件、范圍、后綴可選,但控件和范圍至少要有一個。
- 圖標類,添加ic前綴
- 背景類,添加bg前綴
- 分隔類,添加div前綴
- 默認類,添加def前綴
- 區分狀態時,默認狀態,添加normal后綴
- 區分狀態時,按下時的狀態,添加pressed后綴
- 區分狀態時,選中時的狀態,添加selected后綴
- 區分狀態時,不可用時的狀態,添加disable后綴
- 多種狀態的,添加selector后綴(一般為ListView的selector或按鈕的selector)
| 名稱 | 功能 | 例子 |
| btn_xx | 按鈕圖片使用btn_整體效果(selector) | btn_login |
| btn_xx_normal | 按鈕圖片使用btn_正常情況效果 | btn_login_normal |
| btn_xx_pressed | 按鈕圖片使用btn_點擊時候效果 | btn_login_pressed |
| btn_xx_focused | state_focused聚焦效果 | et_username_focused |
| btn_xx_disabled | state_enabled?(false)不可用效果 | btn_login_disabled |
| btn_xx_checked | state_checked選中效果 | btn_ hobby_checked |
| btn_xx_selected | state_selected選中效果 | btn_hobby_selected |
| btn_xx_hovered | state_hovered懸停效果 | btn_login_hovered |
| btn_xx_checkable | state_checkable可選效果 | btn_ hobby_checkable |
| btn_xx_activated | state_activated激活的 | btn_login.activated |
| btn_xx_windowfocused | state_window_focused | et_pasword_windowfocused |
| bg_xx | 背景圖片使用bg_功能_說明 | bg_home |
12. 動畫文件命名
動畫類型_動畫方向。
模塊名_邏輯名稱
邏輯名稱
refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml
普通的tween動畫采用如下表格中的命名方式
- fade_in,淡入
- fade_out,淡出
- push_down_in,從下方推入
- push_down_out,從下方推出
- slide_in_from_top,從頭部滑動進入
- zoom_enter,變形進入
- shrink_to_middle,中間縮小
?
-
注釋規范
1. 文件頭注釋
文件頂部統一添加版權聲明,聲明的格式如下:
2. 類和接口注釋
類和接口統一添加javadoc注釋,格式如下:
/*** 類或接口的描述信息** @author ${USER}* @date ${DATE}*/3. 方法注釋
下面幾種方法,都必須添加javadoc注釋,說明該方法的用途和參數說明,以及返回值的說明。
- 接口中定義的所有方法
- 抽象類中自定義的抽象方法
- 抽象父類的自定義公用方法
- 工具類的公用方法
4. 變量和常量注釋
下面幾種情況下的常量和變量,都要添加注釋說明,優先采用右側//來注釋,若注釋說明太長則在上方添加注釋。
- 接口中定義的所有常量
- 公有類的公有常量
- 枚舉類定義的所有枚舉常量
- 實體類的所有屬性變量
-
常見縮寫表
| 名稱 | 縮寫 | 名稱 | 縮寫 |
| icon | ic (主要用在app的圖標) | document | doc |
| color | cl(主要用于顏色值) | error | err |
| divider | di(主要用于分隔線,不僅包括Listview中的divider,還包括普通布局中的線) | escape | esc |
| selector | sl(主要用于某一view多種狀態,不僅包括Listview中的selector,還包括按鈕的selector) | increment | inc |
| average | avg | infomation | info |
| background | bg(主要用于布局和子布局的背景) | initial | init |
| buffer | buf | image | img |
| control | ctrl | Internationalization | I18N |
| delete | del | length | len |
總結
以上是生活随笔為你收集整理的Android 宝典:代码规范与命名规范的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVA 11991 Easy Prob
- 下一篇: 一个计算机网络的物理组成,1.1.2.1