-
Java類
-
類名:大駝峰命名,所有單詞首寫字母大寫,并且類名最好為名詞.
- 正確
public class People{ } public class School{ } public class SchoolModel{ }
- 錯誤
people,school,schoolmodel
- 常用類命名
- activity類,以Activity為后綴
- fragment類,以Fragment為后綴
- service類,以Service后綴
- adapter類,以Adapter為后綴
- 工具類,以Util為后綴
- 實體類,命名以實際含義
- 接口,以I為前綴(后續補充callback等命名)
-
包名:全部單詞小寫用"."連接單詞,不使?用下劃線鏈接,
- 正確:
com.login.login, com.login.password
- 錯誤
com_login_login com_login_password
-
局部變量:采用小駝峰,第一個單詞手寫字母小寫后面單詞首寫字母都大寫
- 正確
People people=new People(); Man man=new Man();
- 錯誤
People People=new People(); Man Man=new Man();
-
全局變量:依然采用小駝峰命名,但是有些小的區別,第一個字母必須為小寫m后面加相應的單詞(依據Android源碼編寫)
- 正確
public People mPeople; public Man mMan;
- 錯誤
public People people; public Man Man;
-
PS:實體類中的成員變量不做m+限制,采用小駝峰命名規范,單詞拼接使用"_",如:
public String year; public String name_count; public String school;
后續補充全局boolean變量的命名
- 常量命名:單詞所有字母大寫,并用下劃線拼接單詞,
- 正確```` public static final String CONSTANT_CASE="constant_case"; public static final int COUNTRY_CHINA=124; ````
-
錯誤
public static final String CONSTANT_case="constant_case"; public static final int COUNTRY_china=124;
-
常用常量定義規范:
intent filter相關常量
- action:INTENT_ACTION_功能
- category:INTENT_CATEGORY_功能
- 字符串定義規范:"包名+功能(大駝峰)",如:"com.example.action.TIMETRAVEL"-
組件之間數據傳遞的鍵值
- EXTRA_功能,確保將應用的軟件包名稱作為前綴,如:
public static final String EXTRA_GIGAWATTS ="com.example.EXTRA_GIGAWATTS";
-
用于startActivityForResult()和setResult的code常量:
- REQUEST_CODE_功能
- RESULT_CODE_功能- 常量位置定義規則:
- 只限于當前類使用的常量,定義在當前類即可
- 公共常量放在公共常量類
- 常量位置定義規則:
-
方法命名:小駝峰,且盡量動詞開頭
- 正確
public void login(); public void getHome(); public void isLogin();
- 錯誤
public void Login(); public void GetHome();
- 常用方法命名
- 初始化方法,命名以init開頭,如initView()
- 按鈕點擊方法
- 設置方法,以set開頭,如setData()
- 具有返回值的獲取方法,以get開頭,如getData();
- 通過異步加載數據的方法,以laod開頭,如loadData();
- 布爾的判斷,命名以is或has開頭,如isCheck();
-
方法參數命名:小駝峰命名,如
public void login(String username,String password); public void isLogin(String loginName);
-
命名規則:
-
控件命名:
- 全局:m+功能+View
- 局部:功能+View;
- 如:
public Button mLoginView; public LinearLayout mLoginContainView;
- ps:不采用:m+功能名+控件縮寫,功能+控件縮寫,的原因主要考慮很多控件縮寫重復,并且每添加一個自定義控件就需要定義一個控件縮寫很痛苦。特別是當一個控件為Button loginBtn ,當需求變更需要使用TextView,很多時候會忘修改修改縮寫。
其他對象命名按照:全局變量和局部變量
-
-
-
Class 內部順序和邏輯
每個 class 都應該按照一定的邏輯結構來排列基成員變量、方法、內部類等,從而達到良好的可讀性。
總體上來說,要按照先 public, 后 protected, 最后 private, 函數的排布也應該有一個邏輯的先后順序,由重到輕。
-
以下順序可供參考:
- 定義TAG,一般為 private(可選)
- 定義 public 常量
- 定義 protected 常量、內部類
- 定義 private 變量
- 定義 public 方法
- 定義 protected 方法
- 定義 private 方法
資源文件命名:
-
圖片命名: 單詞全部小寫,用""拼接,命名規則:前綴名名字,前綴名名字狀態(后綴) 且圖片統一放在mipmap相對應的位置,
-
如:
bg_main.png、ic_search_press.png
前綴,后綴表格
-
前綴 | 說明 |
---|---|
ic | icon 主要用于布局和子布局的圖標 |
bg | background 主要用于布局和子布局的背景 |
div | divider 主要用于分隔線,不僅包括Listview中的還包括普通布局中的線 |
后綴 | 說明 |
---|---|
不加 | 圖片的狀態,代表普通狀態 |
pressed | 圖片的狀態,代表按下狀態 |
selected | 圖片的狀態,代表其所占的view被選中 |
disable | 圖片的狀態,代表其所占的view沒有被選中 |
-
布局文件命名:單詞全部小寫,采用"_"拼接,
Activity 的 layout 以 module_activity 開頭
Fragment 的 layout 以 module_fragment 開頭
Dialog 的 layout 以 module_dialog 開頭
include 的 layout 以 module_include 開頭
ListView 的行 layout 以 module_list_item 開頭
RecyclerView 的 item layout 以 module_recycle_item 開頭
GridView 的行 layout 以 module_grid_item 開頭
PopupWindow的layout以module_ppw開頭
include的layout以module_include開頭
stubview的layout以module_stubview開頭
merge的layout以module_merge開頭
menu的layout以module_menu開頭 控件id命名:module_功能,
id=login_cancel
- string資源文件命名:不要跟title、dialog、button等東西關系起來,全部寫入 module_strings.xml 文件中, 字符串以小寫單詞+下劃線的方式命名,采用以下規則:
模塊名_邏輯名稱
如:moudule_login_tips,module_homepage_notice_desc
- colors資源使用#AARRGGBB 格式寫入 module_colors.xml 文件中命名規則:
模塊名_邏輯名稱_顏色
<color name="module_btn_bg_color">#33b5e5e5</color>
- style 資源采用小寫單詞+下劃線方式命名,寫入 module_styles.xml 文件中, 采用以下規則:
父 style 名稱.當前 style 名稱
<style name="ParentTheme.ThisActivityTheme">
...
</style>
-
themes.xml
- 命名:大駝峰,首單詞字母大寫,也可以用"."拼接,如以下兩種寫法都是規范的```` <style name="BaseActionBarTheme" parent="ThemeOverlay.AppCompat.ActionBar" /> <!-- app 通用actionbar主題--> <style name="AppActionBarTheme" parent="BaseActionBarTheme"> <item name="actionMenuTextAppearance">@style/ActionMenuText</item> <item name="actionMenuTextColor">@color/colorPrimaryText</item> </style> ````
dimen 資源以小寫單詞+下劃線方式命名,寫入 module_dimens.xml 文件中, 采用以下規則:
模塊名_描述信息
<dimen name="module_horizontal_line_height">1dp</dimen>
- anim 資源名稱,命名規則:
模塊名_邏輯名稱_[方向|序號]
tween 動畫資源:盡可能以通用的動畫名稱命名,如 module_fade_in ,
module_fade_out , module_push_down_in (動畫+方向);
frame 動畫資源:盡可能以模 塊+功能命名+序號。如:module_loading_grey_001
- xml文件下
- perference配置文件,功能_preferences.xml
- drawable資源名稱:
模塊名_業務功能描述_控件描述_控件狀態限定詞
如:module_login_btn_pressed,module_tabs_icon_home_normal
- 細節規范
文件編碼:源文件編碼格式為UTF-8。
import不要使用通配符, 即,不要出現類似這樣的import語句:import java.util.*;
重載:永不分離當一個類有多個構造函數,或是多個同名方法,這些函數/方法應該按順序出現在一起,中間不要放進其它函數/方法。
-
判斷語句:
- if, else, for, do, while語句一定要附帶大括號如:
if(XXX){ }else{ }
- 錯誤示例:
If xxxx Else xxxx
- 每次只聲明一個變量,不要使用組合聲明,比如
````
錯誤 int year, name;
正確 int year;
int name;
````
- switch塊內 default的情況要寫出來,每個switch語句都包含一個default語句組,即使它什么代碼也不包含。
- 方法參數個數最多7個(構造函數盡量限制7個或者使用Builder模式)
- 待討論
- 一行代碼或者注釋限制為80到100字符,任何一行如果超過這個字符數限制,必須自動換行
- 一個方法不能超過一屏,超過一屏則分解為多個方法
-
注釋規范
-
類注釋:每個類必須說明這個類是做什么的,不用寫作者名(讓每個人都可以修改這個類,避免添加其他人添加功能找原作者)
/** * to do something? */ public class AppActivity extends BaseActivity {}
-
方法注釋:
/** * *@param key 鍵值 *@param mObject 對象 *@return 返回值 */ public String getName(String key,Object object){}
-
常量注釋:
/** * inten跳轉指定值 */ public static final int INTENT_APP=1001;
-
實參注釋(視具體情況添加)
getName(key/*實參注釋*/)
-
-
接口定義方法,每個方法必須加注釋
- 注意事項注釋
- TODO 使用TODO來標記代碼,說明標識處有功能代碼待編寫
- FIXME 使用FIXME來標記代碼,說明標識處代碼需要修正,甚至代碼是 錯誤的,不能工作,需要修復
- XXX 使用XXX來標記代碼,說明標識處代碼雖然實現了功能,但是實現的方法有待商榷,希望將來能改進
- 注意事項注釋
-
參考資料