Android 規範
1、AS規範
- 儘量使用統一的IDE進行開發;
- 編碼格式統一為UTF-8;
- 編輯完.java、 .xml等檔案後一定要格式化(基本格式方面使用 AS 預設模板即可);
- 刪除多餘的import,減少警告出現,可利用AS的Optimize Imports(Settings → Keymap → Optimize Imports)快捷鍵;
2、命名規範
程式碼中的命名嚴禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。即使純拼音命名方式也要避免採用。但alibaba、taobao、youku、hangzhou等國際通用的名稱,可視同英文。
2.1包名
包名全部小寫,連續的單詞只是簡單地連線起來,不使用下劃線,採用反域名命名規則,全部使用小寫字母。
一級包名是頂級域名,通常為com,edu,gov,net,org等,二級包名為公司名,三級包名根據應用進行命名,後面就是對包名的劃分了,關於包名的劃分,使用按功能分。
目前進行統一
一級包名為com
二級包名為jeno
三級包名根據應用來進行命名 如智農聯-->com.jeno.bigfarmer
2.2類名
- 類名都以UpperCamelCase風格編寫。
- 類名通常是名詞或名詞短語,介面名稱有時可能是形容詞或形容詞短語。
- 名詞,採用大駝峰命名法,儘量避免縮寫,除非該縮寫是眾所周知的, 比如HTML, URL,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。
- 介面(interface)命名規則與類一樣採用大駝峰命名法,以able結尾
interface Runnable
注意:如果專案採用MVP,所有Model、View、Presenter的介面都以I為字首,不加字尾,其他的介面採用上述命名規則。
介面類 | 描述 | 例如 |
---|---|---|
ILoginView | 登入的View層 | 登入View層一些介面的定義 |
ILoginPresent | 登入的Present層 | 登入Present層一些介面的定義 |
ILoginPresent | 登入的Present層 | 登入Present層一些介面的定義 |
... | ... | ... |
類 | 描述 | 例如 |
---|---|---|
Activity 類 | Activity為字尾標識 | 歡迎頁面類WelcomeActivity |
Adapter類 | Adapter 為字尾標識 | 新聞詳情介面卡 NewDetailAdapter |
解析類 | Parser為字尾標識 | 首頁解析類HomePosterParser |
工具方法類 | Utils或Manager為字尾標識(與系統或第三方的Utils區分)或功能+Utils | 執行緒池管理類:ThreadPoolManager日誌工具類:LogUtils(Logger也可)列印工具類:PrinterUtils |
資料庫類 | 以DBHelper字尾標識 | 新聞資料庫:NewDBHelper |
Service類 | 以Service為字尾標識 | 時間服務TimeService |
BroadcastReceiver類 | 以Receiver為字尾標識 | 推送接收JPushReceiver |
ContentProvider類 | 以Provider為字尾標識 | ShareProvider |
自定義的共享基礎類 | 以Base開頭 | BaseActivity,BaseFragment |
... | ... | ... |
2.3方法名
方法名都以lowerCamelCase風格編寫。
方法名通常是動詞或動詞短語。
方法 | 描述 |
---|---|
initXX() | 始化相關方法,使用init為字首標識,如初始化佈局initView() |
isXX() checkXX() | 方法返回值為boolean型的請使用is或check為字首標識 |
getXX() | 返回某個值的方法,使用get為字首標識 |
setXX() | 設定某個屬性值 |
handleXX()/processXX() | 對資料進行處理的方法 |
displayXX()/showXX() | 彈出提示框和提示資訊,使用display/show為字首標識 |
updateXX() | 更新資料 |
saveXX() | 儲存資料 |
resetXX() | 重置資料 |
clearXX() | 清除資料 |
removeXX() | 移除資料或者檢視等,如removeView(); |
drawXX() | 繪製資料或效果相關的,使用draw字首標識 |
2.4常量名
常量名命名模式為CONSTANT_CASE,全部字母大寫,用下劃線分隔單詞。
2.5非常量欄位名
非常量欄位名以lowerCamelCase風格的基礎上改造為如下風格:
基本結構為scopeVariableNameType。
scope:範圍
非公有,非靜態欄位命名以m開頭。
靜態欄位命名以s開頭。
公有非靜態欄位命名以p開頭。
公有靜態欄位(全域性變數)命名以g開頭。
例子:
非常量 | 描述 |
---|---|
private int mPrivate | 非公有,非靜態欄位命名以m開頭。 |
protected int mPrivate | 非公有,非靜態欄位命名以m開頭。 |
private static MyClass sSingletion | 靜態欄位命名以s開頭。 |
public int pField | 公有非靜態欄位命名以p開頭。 |
public static int gField | 公有靜態欄位(全域性變數)命名以g開頭。 |
考慮到Android中使用很多UI控制元件,為避免控制元件和普通成員變數混淆以及更好達意,所有用來表示控制元件的成員變數統一加上控制元件縮寫作為字首。(忽略上面的定義 不用加入 m s p g 等...) 建議使用 ButterKnife
名稱 | 縮寫 | 使用 |
---|---|---|
TextView | tv | tvLogin |
EditText | et | ... |
ImageButton | ib | ... |
Button | btn | ... |
ImageView | iv | ... |
ListView | lv | ... |
GridView | gv | ... |
ProgressBar | pb | ... |
SeekBar | sb | ... |
RadioButtion | rb | ... |
CheckBox | cb | ... |
ScrollView | sv | ... |
LinearLayout | ll | ... |
FrameLayout | fl | ... |
RelativeLayout | rl | ... |
RecyclerView | rv | ... |
WebView | wv | ... |
VideoView | vv | ... |
Spinner | spn | ... |
ToggleButton | tb | ... |
對於普通變數一般不新增型別字尾,如果統一新增型別字尾
用統一的量詞通過在結尾處放置一個量詞,就可建立更加統一的變數,它們更容易理解,也更容易搜尋。
例如,請使用 mCustomerStrFirst 和 mCustomerStrLast ,而不要使用mFirstCustomerStr和mLastCustomerStr。
量詞列表 | 量詞字尾說明 |
---|---|
First | 一組變數中的第一個 |
Last | 一組變數中的最後一個 |
Next | 一組變數中的下一個變數 |
Prev | 一組變數中的上一個 |
Cur | 一組變數中的當前變數 |
另外注意 : 集合新增如下字尾:List、Map、Set
陣列新增如下字尾:Arr
注意:所有的VO(值物件)統一採用標準的lowerCamelCase風格編寫,所有的DTO(資料傳輸物件)就按照介面文件中定義的欄位名編寫。
2.6引數名
引數名以lowerCamelCase風格編寫。
引數應該避免用單個字元命名。
2.7引數名
引數名以lowerCamelCase風格編寫。
2.8 臨時變數
臨時變數通常被取名為i、j、k、m和n,它們一般用於整型;c、d、e,它們一般用於字元型。 如:for (int i = 0; i < len ; i++)。
2.9 型別變數名
型別變數可用以下兩種風格之一進行命名:
單個的大寫字母,後面可以跟一個數字(如:E, T, X, T2)。
具體的命名規範按照類的名字命名,不過後面加上一個大寫的 T
(如:RequestT, FooBarT
)
3、 資原始檔規範
3.1 資源佈局檔案(XML檔案(layout佈局檔案))
全部小寫,採用下劃線命名法
3.1.1 contentView命名
必須以全部單詞小寫,單詞間以下劃線分割,使用名詞或名詞片語。
所有Activity或Fragment的contentView必須與其類名對應,對應規則為:將所有字母都轉為小寫,將型別和功能調換(也就是字尾變字首)。
例如:activity_main.xml
3.1.2 Dialog命名
規則:dialog_描述.xml
例如:dialog_hint.xml
3.1.3 PopupWindow命名
規則:ppw_描述.xml
例如:ppw_info.xml
3.1.4 列表項命名
規則:item_描述.xml
例如:item_city.xml
3.1.5 包含項命名
規則:模組(位置)描述.xml
例如:activity_main_head.xml
、activity_main_bottom.xml
注意:通用的包含項命名採用:專案名稱縮寫_描述.xml
例如:xxxx_title.xml
3.1.6 資原始檔(圖片drawable資料夾下)
全部小寫,採用下劃線命名法,加字首區分
命名模式:可加字尾 _small 表示小圖, _big 表示大圖,邏輯名稱可由多個單詞加下劃線組成,採用以下規則:
用途_模組名_邏輯名稱
用途_模組名_顏色
用途_邏輯名稱
用途_顏色
說明:用途也指控制元件型別 (上面附有UI的定義表)
例如:
名稱 | 說明 |
---|---|
btn_main_home.png | 按鍵 用途_模組名_邏輯名稱
|
divider_maket_white.png | 分割線 用途_模組名_顏色
|
ic_edit.png | 圖示 用途_邏輯名稱
|
bg_main.png | 背景 用途_邏輯名稱
|
btn_red.png | 紅色按鍵 用途_顏色
|
btn_red_big.png | 紅色大按鍵 用途_顏色
|
ic_head_small.png | 小頭像 用途_邏輯名稱
|
bg_input.png | 輸入框背景 用途_邏輯名稱
|
divider_white.png | 白色分割線 用途_顏色
|
bg_main_head | 主模組頭部背景圖片 用途_模組名_邏輯名稱
|
def_search_cell | 預設搜尋介面單元圖片 用途_模組名_邏輯名稱
|
ic_more_help | 更多幫助圖示 用途_邏輯名稱
|
divider_list_line | 列表分割線 用途_邏輯名稱
|
selector_search_ok | 搜尋介面確認選擇器 用途_模組名_邏輯名稱
|
shape_music_ring | 音樂介面環形形狀 用途_模組名_邏輯名稱
|
如果有多種形態,如按鈕選擇器: btn_xx.xml(selector)
名稱 | 說明 |
---|---|
btn_xx | 按鈕圖片使用 btn_整體效果 (selector) |
btn_xx_normal | 按鈕圖片使用btn_正常情況效果
|
btn_xx_pressed | 按鈕圖片使用btn_點選時候效果
|
btn_xx_focused |
state_focused 聚焦效果 |
btn_xx_disabled |
state_enabled (false) 不可用效果 |
btn_xx_checked |
state_checked 選中點選效果 |
btn_xx_selected |
state_selected 選中效果 |
btn_xx_hovered |
state_hovered 懸停效果 |
btn_xx_checkable |
state_checkable 可選效果 |
btn_xx_activated |
state_activated 啟用的 |
btn_xx_windowfocused | state_window_focused |
注意:使用AndroidStudio的外掛SelectorChapek可以快速生成selector,前提是命名要規範。
3.2 動畫檔案(anim資料夾下)
全部小寫,採用下劃線命名法,加字首區分。
具體動畫採用以下規則:模組名_邏輯名稱
。
例如:refresh_progress.xml、market_cart_add.xml、market_cart_remove.xml。
普通的tween動畫採用如下表格中的命名方式:動畫型別_方向
名稱 | 說明 |
---|---|
fade_in | 淡入 |
fade_out | 淡出 |
push_down_in | 從下方推入 |
push_down_out | 從下方推出 |
push_left | 推向左方 |
slide_in_from_top | 從頭部滑動進入 |
zoom_enter | 變形進入 |
slide_in | 滑動進入 |
shrink_to_middle | 中間縮小 |
3.3 values中name命名
3.3.1 colors.xml
colors的name命名使用下劃線命名法,在你的colors.xml
檔案中應該只是對映顏色的名稱一個ARGB值,而沒有其它的。不要使用它為不同的按鈕來定義ARGB值。
進行這樣定義 講一個風格的顏色放到一起
<resources>
<!-- grayscale -->
<color name="white" >#FFFFFF</color>
<color name="gray_light">#DBDBDB</color>
<color name="gray" >#939393</color>
<color name="gray_dark" >#5F5F5F</color>
<color name="black" >#323232</color>
<!-- basic colors -->
<color name="green">#27D34D</color>
<color name="blue">#2A91BD</color>
<color name="orange">#FF9D2F</color>
<color name="red">#FF432F</color>
</resources>
3.3.2 dimens.xml
像對待colors.xml一樣對待dimens.xml檔案 與定義顏色調色盤一樣,你同時也應該定義一個空隙間隔和字型大小的“調色盤”。 如下所示:
<resources>
<!-- font sizes -->
<dimen name="font_larger">22sp</dimen>
<dimen name="font_large">18sp</dimen>
<dimen name="font_normal">15sp</dimen>
<dimen name="font_small">12sp</dimen>
<!-- typical spacing between two views -->
<dimen name="spacing_huge">40dp</dimen>
<dimen name="spacing_large">24dp</dimen>
<dimen name="spacing_normal">14dp</dimen>
<dimen name="spacing_small">10dp</dimen>
<dimen name="spacing_tiny">4dp</dimen>
<!-- typical sizes of views -->
<dimen name="button_height_tall">60dp</dimen>
<dimen name="button_height_normal">40dp</dimen>
<dimen name="button_height_short">32dp</dimen>
</resources>
3.3.3 strings.xml
strings的name命名使用下劃線命名法,採用以下規則:模組名+邏輯名稱
,這樣方便同一個介面的所有string都放到一起,方便查詢。
名稱 | 說明 |
---|---|
main_menu_about | 主選單按鍵文字 |
friend_title | 好友模組標題欄 |
friend_dialog_del | 好友刪除提示 |
login_check_email | 登入驗證 |
dialog_title | 彈出框標題 |
button_ok | 確認鍵 |
loading | 載入文字 |
3.3.3 styles.xml
style
的name
命名使用大駝峰命名法,幾乎每個專案都需要適當的使用style檔案,因為對於一個檢視來說有一個重複的外觀是很常見的,將所有的外觀細節屬性(colors、padding、font)放在style檔案中。例如:
<style name="ContentText">
<item name="android:textSize">@dimen/font_normal</item>
<item name="android:textColor">@color/basic_black</item>
</style>
應用到```TextView```中:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/price"
style="@style/ContentText"
/>
#####3.4 strings.xml
layout中的id命名
命名模式為:```view縮寫_模組名_邏輯名```,比如```btn_main_search```
####4 註釋規範
#####4.1類註解
每個類完成後應該有作者姓名,該類的作用等資訊
/**
author : Blankj
e-mail : xxx@xx
time : 2017/03/07
desc : xxxx描述
version: 1.0
*/
public class WelcomeActivity {
...
}
上面的配置 在as中 Settings → Editor → File and Code Templates → Includes → File Header,輸入
/**
author : ${USER}
e-mail : xxx@xx
time : ${YEAR}/${MONTH}/${DAY}
desc :
version: 1.0
*/
#####4.2方法註釋
每一個成員方法(包括自定義成員方法、覆蓋方法、屬性方法)的方法頭都必須做方法頭註釋。
/**
- bitmap轉byteArr
- @param bitmap bitmap物件
- @param format 格式
- @return 位元組陣列
*/
public static byte[] bitmap2Bytes(Bitmap bitmap, CompressFormat format) {
if (bitmap == null) return null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(format, 100, baos);
return baos.toByteArray();
}
#####4.3其他一些註釋
AS已幫你整合了一些註釋模板,我們只需要直接使用即可
// TODO: 17/3/14 需要實現,但目前還未實現的功能的說明
// FIXME: 17/3/14 需要修正,甚至程式碼是錯誤的,不能工作,需要修復的說明
###5其他一些規範
- 1、合理佈局,有效運用```<merge>```、```<ViewStub>```、```<include>```標籤;
- 2、```Activity```和```Fragment```裡面有許多重複的操作以及操作步驟,所以我們都需要提供一個```BaseActivity```和```BaseFragment```,讓所有的Activity和Fragment都繼承這個基類。
- 3、方法基本上都按照呼叫的先後順序在各自區塊中排列;
- 4、相關功能作為小區塊放在一起(或者封裝掉);
- 5、當一個類有多個建構函式,或是多個同名方法,這些函式/方法應該按順序出現在一起,中間不要放進其它函式/方法;
- 6、資料提供統一的入口。無論是在 MVP、MVC 還是 MVVM 中,提供一個統一的資料入口,都可以讓程式碼變得更加易於維護。比如可使用一個```DataManager```,把 ```http、preference```、```eventpost```、```database``` 都放在```DataManger```裡面進行操作,我們只需要與DataManger打交道;
- 7、多用組合, 少用繼承;
- 8、提取方法, 去除重複程式碼。對於必要的工具類抽取也很重要,這在以後的專案中是可以重用的。
- 9、儘可能使用區域性變數;
- 10、及時關閉流;
- 11、儘量減少對變數的重複計算;
for (int i = 0; i < list.size(); i++) {
...
}
改為
for (int i = 0, int length = list.size(); i < length; i++) {
...
}
- 12、採用懶載入的策略,即在需要的時候才建立;
String str = "aaa";
if (i == 1) {
list.add(str);
}
建議替換為:
if (i == 1) {
String str = "aaa";
list.add(str);
}
- 13、不要在迴圈中使用try…catch…,應該把其放在最外層;
目前就是這些 希望在用的時候有什麼問題的進行補充或者修改。
相關文章
- Android 程式碼規範 - 命名規範Android
- Android程式碼規範:命名規範Android
- Android命名規範Android
- 【譯】Android API 規範AndroidAPI
- Android 專案規範Android
- android 編碼規範Android
- Android開發規範Android
- 【譯】Android NDK API 規範AndroidAPI
- Android 程式碼規範大全Android
- android檔案命名規範Android
- Android編碼規範指南Android
- 前端開發規範:命名規範、html規範、css規範、js規範前端HTMLCSSJS
- 阿里Android開發規範:資原始檔命名與使用規範阿里Android
- Android開發規範詳解Android
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- Android架構系列-開發規範Android架構
- Android 開發規範(完結版)Android
- Android應用版本命名規範Android
- Android程式碼的書寫規範Android
- [轉]Android開發規範(updating)Android
- 最新Android & iOS設計尺寸規範AndroidiOS
- Android程式碼規範參考指南Android
- 前端規範之javascript規範前端JavaScript
- 前端規範之CSS規範前端CSS
- 前端規範之HTML 規範前端HTML
- 阿里Android開發規範:安全與其他阿里Android
- 最全面的 Android 編碼規範指南Android
- 最佳實踐之 Android程式碼規範Android
- PHP 規範 - Symfony 程式碼規範PHP
- 前端規範之nodeJs 規範前端NodeJS
- 編碼規範系列:css規範CSS
- 『前端規範化』CSS命名規範化前端CSS
- 前端規範之vue 專案規範前端Vue
- 前端規範與思考(二)———css規範前端CSS
- 前端規範之CSS規範(Stylelint)前端CSS
- 阿里Android開發規範:Bitmap、Drawable 與動畫阿里Android動畫
- 阿里Android開發規範:UI 與佈局阿里AndroidUI
- 【敏捷開發】Android團隊開發規範敏捷Android