android的編碼習慣
今天大概看了一些別人的寫的關於的android設計規範和編碼習慣,覺得看了一遍並不是很有用,最好還是記下來吧
檔案 java檔案
- 檔案的編碼格式為utf-8;
原始檔的結構
- 許可證和版權資訊
- package語句
- import語句
- 一個頂級類,和以上的每個部分都用一個空行隔開
注意: import語句不要使用萬用字元,可以講引用類的static final 逐一引入
類的宣告
以前這塊一直不知道這塊怎麼處理,用android studio 一直追究著程式碼的排版格式。這裡為我提供了一種思路
類成員的順序
類的成員的順序,第一次分類以模組區別,比如說view的成員放在一塊,靜態常量放在一塊的,第二次分類,以邏輯和關聯性的分類,比如view可以採用自上而下的邏輯去給每個類命名和排版。總之不能用新的成員總是放在類的結尾,這樣的其實是按照時間的順序去放置類的成員的,而不是按照某種邏輯。
區塊的劃分
- 常量宣告區
- UI控制元件成員變數的宣告區
- 普通成員變數宣告區
- 內部介面的宣告區
- 初始化相關方法區
- 事件響應方法區
- 普通邏輯方法區
- 過載的邏輯方法區
- 發起的非同步任務方法區
- 非同步任務回撥方法區
- 生命週期回撥方法區
- 內部類宣告區
常量的宣告區
- static final 型別的常量 所有單詞大寫,每個單詞以_來連線 public static final
- 全域性常量:以g開頭,並且依照於駝峰原則 public static
- 公有的非靜態的變數: 以p開頭,並且依照於駝峰原則 public
- 私有靜態常量:以s開頭,並且依照於駝峰的原則 private static final
- 私有的非靜態的變數:以m開頭 private
- 預設的:不做處理。
//public static final ****
public static final ACTION_START = "ACTION_START";
// public static ****
public static gString ;
//public ***
public int pCount;
// private static final **
private static sInstance;
//private ***
private int mCount;
內部介面的宣告區
比如一些自定義的listener
初始化的相關的方法
以onCreate為主,initView()和initData();
事件響應的方法
bindEvent();
類成員的排列的通用規則
- 按照先後的發生順序
- 常量按照使用的先後順序
- ui控制元件成員變數按章的layout的檔案的中的先後順序
- 普通成員變數按照使用的先後順序
- 方法按照呼叫的先後順序的排列
- 相關功能作為一個小區塊放在一起
縮排
4個空格
列的限制
一行不超過80到100行,如果超出,需要自動換行,自動換行的對照的原則,
- 非賦值運算子處斷開
- 類雲演算法的處斷開
- 如果非要在賦值運演算法斷開,則在符號的末尾斷開
- 方法名或者建構函式與做括號在同一行
- ,與前面的內容在同一行
- 至少縮排8個字元
垂直空白
一個空白行
1. 類裡連續的成員之間:欄位,建構函式,方法,巢狀類,靜態初始化塊,例項初始化塊
2. 函式體內,語句的邏輯分組間
3. 類內的第一個成員前或最後一個成員後的空行
4. 多個連續的空行是允許的,但沒有必要這樣做
5. 同一成員,不同邏輯之間
具體的一些例項
列舉
列舉用逗號分隔
陣列
常見的宣告的方法常寫成塊狀結構的。
變數的宣告
採用第一次使用的時候,採取宣告變數,不要的在函式體的開頭將所有的變數都宣告
另外參考的不要重複或過多宣告的臨時變數比如
//不要採用下面的
for(int i = 0;i < 10;i++){
int j = i;
}
//儘量改成這樣子的
int j = -1;
for(int i = 0;i < 10;i++){
j = i;
}
switch語句
儘量講default的語句寫出,並且當出現fall throug的時候,儘量使用註釋,比如
switch(count){
case 4:
count--; //do count3 while count = 4;
case 3:
doCount3();
break;
case 2:
doCount2();
break;
case 1:
doCount1();
break;
case 0:
doCount0();
break;
default:
break;
}
modifiers
當出現多個限定詞後,採用public protected private abstract static final transient volatile synchronized native strcitfp
命名的約定
這塊我覺得最為重要,畢竟每個人其實的命名規則是不一樣,這樣的話就會導致程式碼的易讀性存在一些問題,所以我們還是需要採用一些的在命名的規範的
android 整個工程的分包結構
mvc 的結構下
包的名稱 | 作用 |
---|---|
ui | 檢視層,其中可以fragment/activity等 |
serivce | 整體結構使用的service |
receiver | broadcastReceiver |
adapter | 頁面使用adapter |
utils | 工具類 |
helper/compact | 用於實現的協助類或者相容 |
data/db | 有關資料庫的類 |
model | 模型類 |
bean | javabean |
view/widget | 自定義檢視類 |
api | 介面層 |
constant | 常量 |
base | 基礎的類,常見的有baseActivity,baseFragment等 |
mvp 模式
幾本上和mvc差不多
包的名稱 | 作用 |
---|---|
api | 介面層 |
widget | 自定義檢視層 |
model | 模型層 |
presenter | P層,用於處理activity和fragment的邏輯 |
view | 管理的view層的邏輯的介面,activity去實現 |
service | 服務層 |
receiver | 廣播層 |
類名
採用大寫的駝峰原則,
類名 | 結尾 |
---|---|
Activity | XXXActivity |
BroadcastReceiver | XXXReceiver |
Service | XXXService |
ContentProvider | Provider |
BaseXXX | BaseXXX |
資原始檔的命名規範
layout
- contentview :activity/fragment_類名
- dialog:dialog_描述
- popupwindow:ppw_描述
- 列表:item_描述
drawable
- 用途模組名邏輯名稱限定詞:用途可以用檢視空間的簡寫,也可以用具體的用途,比如ic,bg_,限定詞為_pressed,_small,_normal等
anim
模組名_邏輯名稱:fade_in,可以省去模組名字
values
- string :模組名_邏輯名稱:friend_title
- colors:模組名邏輯名稱顏色;通用的顏色可以採用的顏色作為名字
- styles: 模組名_邏輯名稱
layout id
採用 view的簡寫_view的邏輯名稱
常見的ui的變數宣告以及id宣告
控制元件 | 縮寫 | ui變數的宣告 | layout id的宣告 |
---|---|---|---|
linearLayout | ll | mFriendLL | ll_friend |
RelativeLayout | rl | mFriendRL | rl_friend |
FrameLayout | fl | mFriendFL | fl_friend |
TableLayout | tl | mFriendTL | tl_friend |
Button | btn | mFriendBtn | btn_friend |
ImageButton | ibtn | mFriendIBtn | ibtn_friend |
ImageView | iv | mFriendIV | iv_friend |
TextView | tv | mFriendTV | tv_friend |
EditText | et | mFriendET | et_friend |
ListView | lv | mFriendLV | lv_friend |
GridView | gv | mFriendGV | gv_friend |
常見的英文的單詞,來用來的用途
名稱 | 縮寫 |
---|---|
icon | ic |
color | cl |
divider | di |
selector | sl |
averager | avg |
background | bg |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
information | info |
initial | init |
image | img |
length | len |
library | lib |
message | msg |
password | pwd |
server | srv |
string | str |
temp | tmp |