Android開發規範
命名規範
包命名
規則:包名全部小寫,採用反域名命名規則,一級包名是頂級域名,通常爲com, edu, gov, net, org等,二級包名,通過爲公司名或部門名或者個人名,三級包名通常爲項目名,四級包名爲模塊名或者層級名。以下是從層級包名來劃分android項目中採用的包劃分結構:
com.domain.xxx.activity //用戶界面中所有的Activity類
com.domain.xxx.fragment //界面中所有的Fragment類
com.domain.xxx.adapter //界面中所有的Adapter類(適配器類)
com.domain.xxx.view //自定義的View類
com.domain.xxx.service //後臺Service類
com.domain.xxx.util //項目中常用的公共工具類(網絡, IO, 日誌等)
com.domain.xxx.bean //實體模型類
com.domain.xxx.db //數據庫操作相關的類
com.domain.xxx.config //所有的配置相關的類
com.domain.xxx.api //網絡api接口相關的類
類命名
規則:採用大駝峯式命名法,首字母大寫,儘量避免縮寫,除非該縮寫是衆所周知的,比如HTML,URL,如果類名稱包含單詞縮寫,則單詞縮寫的每個字母均應大寫。以下列舉的是android中幾種最爲常用的類的命名。
class LoginActivity; //activity類
class DiscoverFragment; //fragment類
class AnalysisService; //service類
class WakeupRankAdapter; //adapter類
class StringUtils; //工具類
class UserBean; //模型類
class ApiImpl; //接口實現類
接口命名
規則:命名規則與類命名一樣採用大駝峯式命名法,首字母大寫,多以able, ible, er結尾
interface Comparable;
interface Accessible;
interface OnClickListener;
方法
規則:採用小駝峯命名法,首字母小寫,方法名採用動詞或動名詞結構。方法的命名應該與方法的真正行爲具有對應關係,下面給出一些方法名的動詞前綴標示的建議。
方法名 | 描述 |
---|---|
getXX() | 獲取某個屬性的返回值 |
setXX() | 設置某個屬性值 |
initXX() | 初始化方法,如初始化佈局initView() |
isXX() | 判斷是否true的方法; |
checkXX() | 與isXX意義等價 |
processXX() | 處理數據 |
updateXX() | 更新數據 |
saveXX() | 保存數據 |
addXX() | 添加數據 |
deleteXX() | 刪除數據 |
resetXX() | 重置數據 |
clearXX() | 清除數據 |
removeXX() | 移除數據或者視圖等,如removeView(); |
drawXX() | 繪製數據或者視圖 |
變量
規則:採用小駝峯命名法,首字母小寫。變量名應簡短且能描述其用途,儘量避免拼音,無意義地縮寫。除非是臨時變量,否則不建議使用單個字符的變量名,如i, j, k。對於變量命名,還有一種風格是google的以字母m爲前綴(m爲member縮寫),在android 源碼中隨處可見。
private int userName; //java的一般性風格
private int mUserName; //google的成員變量風格,m爲member的縮寫
常量
規則:常量使用全大寫字母加下劃線的方式命名。
public static final int TAG= "tag";
public static final int START_CLASS_NOT_FOUND = -2;
下面介紹的與android關係更加緊密:
控件變量名
規則:首先需要滿足第5條變量的規則, 模式:邏輯名 + view縮寫
Button sendNewsBtn;
TextView passwordTxt;
控件ID
規則:view縮寫_模塊名_邏輯名
android:id="@+id/btn_news_send" //樣例
view縮寫如下:
View | 縮寫 |
---|---|
TextView | txt |
EditText | edit |
Button | btn |
ImageButton | ibtn |
ImageView | img |
ListView | lv |
RadioGroup | rgroup |
RadioButton | rbtn |
ProgressBar | rbar |
SeekBar | seek |
CheckBox | cb |
Spinner | spinner |
TableLayout | table |
TableRow | row |
LinearLayout | ll |
RelativeLayout | rl |
ScrollView | scroll |
SearchView | search |
TabHost | thost |
TabWidget | twdget |
資源文件名
layout的文件命名
規則:全部小寫,採用下劃線命名法。layout文件命名:組件類型_{模塊_}功能.xml
activity_news_title.xml //樣例
命名規範 | 組件類型 |
---|---|
activity_{模塊_}功能 | Activity命名格式 |
fragment_{模塊_}功能 | Fragment命名格式 |
dialog_{模塊_}功能 | Dialog命名格式 |
popup_{模塊_}功能 | PopupWindow命名格式 |
item_list_{模塊_}功能 | ListView的item命名格式 |
item_grid_{模塊_}功能 | GridView的item命名格式 |
drawable的文件命名
模式:前綴{_控件}{_範圍}{_後綴},控件、範圍、後綴可選
bg_login_pressed.png //樣例
drawable | 命名規則 |
---|---|
圖標類 | 添加ic前綴 |
背景類 | 添加bg前綴 |
分隔類 | 添加div前綴 |
默認類 | 添加def前綴 |
區分狀態時,默認狀態 | 添加normal後綴 |
區分狀態時,按下時的狀態 | 添加pressed後綴 |
區分狀態時,選中時的狀態 | 添加selected後綴 |
區分狀態時,不可用時的狀態 | 添加disable後綴 |
多種狀態的 | 添加selector後綴 |
動畫的文件命名
規則:{範圍_}動畫類型_動畫方向。
login_fade_in.xml //樣例
動畫命名 | 描述 |
---|---|
fade_in | 淡入 |
fade_out | 淡出 |
push_down_in | 從下方推入 |
push_down_out | 從下方推出 |
slide_in_from_top | 從頭部滑動進入 |
zoom_enter | 變形進入 |
shrink_to_middle | 中間縮小 |
資源內的name命名
strings.xml
模式:activity名_{範圍_}邏輯名
<string name="login_username">用戶名</string> //樣例
colors.xml
模式:前綴{_控件}{_範圍}{_後綴}, 控件、範圍、後綴可選,
<color name="bg_login">#FFFFFF</color> //樣例
colors | 命名細則 |
---|---|
背景顏色 | 添加bg前綴 |
文本顏色 | 添加text前綴 |
分割線顏色 | 添加div前綴 |
區分狀態時,默認狀態的顏色 | 添加normal後綴 |
區分狀態時,按下時的顏色 | 添加pressed後綴 |
區分狀態時,選中時的顏色 | 添加selected後綴 |
區分狀態時,不可用時的顏色 | 添加disable後綴 |
代碼風格
原則
- 不要直接忽略Exceptions
例如下面的示例,永遠不要這樣做,無法預測未來可能的變化
void setServerPort(String value) {
try {
serverPort = Integer.parseInt(value);
} catch (NumberFormatException e) { }
}
正確的做法應該如下:
void setServerPort(String value) throws ConfigurationException {
try {
serverPort = Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new ConfigurationException("Port " + value + " is not valid.");
}
}
- import採用完全限定名
不提倡:
import foo.*;
正確做法:
import foo.Bar;
- 括號風格:
不提倡:
if (condition)
body();
正確做法:
if (condition) {
body();
}
- 使用空格來縮進
使用4個空格縮進來代表塊,而絕不使用tab鍵; 使用8個空格來代表行包裹,包括函數調用。
註釋
類註釋,每個類完成後應該有作者姓名和聯繫方式的註釋,對自己的代碼負責
/** * 作者: gityuan * 時間: 13-12-20 19:25 * 描述: 用戶登錄 * 聯繫方式: [email protected] */
public class Login{
...
}
方法註釋,每一個成員方法(包括自定義成員方法、覆蓋方法、屬性方法)的方法頭都必須做方法頭註釋
/* * 方法名: * 功 能: * 參 數: * 返回值:無 */
快註釋
private class MessageObserver extends ContentObserver {
public MessageObserver() {
super(mainHandler);
}
public void onChange(boolean hasChanged) {
// 發送更新UI的消息
mHandler.sendMessage(mHandler.obtainMessage(0x2));
}
}
資源文件註釋
<!--紅色 -->
<color name="red">#FF0000</color>
<!--深藍色 -->
<color name="dark_blue">#0079FF</color>