位址:https://github.com/Sherchen/AndroidConventions
1. AS規範
1.1 CopyRight
在Settings/Editor/CopyRight裡添加一份,内容你可以在github上找一份,改下,這樣每次新增檔案,IDE都會自動加上CopyRight.
1.2 模闆
在Settings/Editor/File and Code Templates右側的includes/File header下修改,比如我的
/**
* <pre>
* author : Sherchen
* e-mail : [email protected]
* time : ${DATE}
* desc : xxxx描述
* version: 1.0
* </pre>
*/
每建立一個新的java檔案,IDE就會自動加上,不要忘記修改desc, version等。
1.3 全局管理gradle變量。
一般都是在root project下面的build.gradle的檔案末尾追加,比如我的
ext {
minSdkVersion =
targetSdkVersion =
buildToolsVersion = '25.0.2'
compileSdkVersion =
}
引用的時候,比如在app module下面的build.gradle,比如:
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
}
2. 工程結構
包括java層和android res層
2.1 Java層結構
我采用的是package by feature(PBF)分層方式,你可以PBF的介紹
2.2 android res層結構
為了友善閱讀和子產品化開發的團隊分工,我把android res目錄按照子產品拆分成幾個,使用代碼如下
sourceSets {
main {
res.srcDirs = [
'src/main/res',//common
'src/main/res-home',//for home module
'src/main/res-cnblog',//for cnblog module
'src/main/res-csdn', //for csdn module
'src/main/res-github', //for github module
'src/main/res-jianshu' //for jianshu module
]
}
}
拆分後的android res 視圖如下
3. Android資源命名規範
3.1 檔案命名
3.1.1 layout命名
layout的一般命名規則是,比如下面
Component 元件 | Class Name | Layout Name |
---|---|---|
Activity | | |
Fragment | | |
Dialog | | |
AdapterView Item | | |
include(通用元件) | |
3.1.2 drawable命名
drawable 檔案的命名規範
Asset Type | Prefix 字首 | Example |
---|---|---|
Action bar | | |
Button | | |
Dialog | | |
Divider | | |
Icon | | |
Menu | | |
Notification | | |
Tabs | | |
icons檔案的命名規範
Asset Type | Prefix 字首 | Example |
---|---|---|
Icons | | |
Launcher icons | | |
Menu icons and Action Bar icons | | |
Status bar icons | | |
Tab icons | | |
Dialog icons | | |
選擇器狀态檔案的命名規範
State | Suffix 尾綴 | Example |
---|---|---|
Normal | | |
Pressed | | |
Focused | | |
Disabled | | |
Selected | | |
3.1.3 其他檔案命名
- menu 因為menu檔案較少,而且都在一個menu目錄下面,是以一般命名就是.xml,比如home.xml
- anim 直接命名,比如: fade_in.xml
- values 目錄下面的檔案,使用複數形式,比如: arrays.xml, attrs.xml, colors.xml, configs.xml, dimens.xml, strings.xml, styles.xml
3.2 檔案下面的name 命名
3.2.1 layout ID命名
一般規則:, 比如android:id=”tv_home_display”,這裡的what,一般使用控件單詞的縮寫,參考5 附錄
3.2.2 color 命名
直接定義顔色值,比如
<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>
3.2.3 dimen命名
一般規則: ,如果不需要特殊定義這個dimen在哪個子產品使用,可以省略,比如
<!-- font sizes -->
<dimen name="font_22">22sp</dimen>
<!-- typical spacing between two views -->
<dimen name="spacing_40">40dp</dimen>
<!-- typical sizes of views -->
<dimen name="button_height_60">60dp</dimen>
3.2.4 string命名
一般規則: _,比如
<!--通用子產品-->
<string name="loading">加載中...</string>
<string name="ok">确認</string>
<string name="cancel">取消</string>
<!--home子產品-->
<string name="home_tab_hot">熱點</string>
<string name="home_tab_find">發現</string>
<string name="home_tab_nearby">附近</string>
3.2.5 style命名
一般規則:.,比如
<style name="ImageView"></style>
<style name="ImageView.Icon">
<item name="android:padding">8dp</item>
</style>
<style name="TextView">
<item name="android:textColor">#212121</item>
<item name="android:textSize">14px</item>
</style>
<style name="TextView.12">
<item name="android:textSize">12px</item>
</style>
4. Java規範
4.1 Java檔案命名規範
類名都以
UpperCamelCase
風格編寫。
類名通常是名詞或名詞短語,接口名稱有時可能是形容詞或形容詞短語。現在還沒有特定的規則或行之有效的約定來命名注解類型。
名詞,采用大駝峰命名法,盡量避免縮寫,除非該縮寫是衆所周知的, 比如
HTML
,
URL
,如果類名稱中包含單詞縮寫,則單詞縮寫的每個字母均應大寫。
類 | 描述 | 例如 |
---|---|---|
Activity 類 | Activity為字尾辨別 | 歡迎頁面類WelcomeActivity |
Fragment 類 | Fragment為字尾辨別 | 首頁頂部類HomeTopFragment |
Dialog 類 | Dialog為字尾辨別 | 更新對話框類UpgradeDialog |
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 |
測試類的命名以它要測試的類的名稱開始,以Test結束。例如:
HashTest
或
HashIntegrationTest
。
接口(interface):命名規則與類一樣采用大駝峰命名法,多以able或ible結尾,如
interface Runnable
、
interface Accessible
。
4.2 Java編碼規範
4.2.1 字段(field)命名
- 類字段,包括變量和常亮
- 公有變量按 小駝峰 法命名
- 私有 & 非靜态成員變量以 m 開頭
- 私有 & 靜态成員變量以 s 開頭
- 常量以大寫字母和下劃線 _ 組成
- 盡量使用 類型+功能/描述的模式 ,如 mTvDisplay
private TextView mTvDisplay;
//靜态常量
public static final int SOME_CONSTANT = ;
//公有變量
public int publicField;
//私有靜态變量
private static String sSingleton;
//預設變量
int mPackagePrivate;
//私有變量
private int mPrivate;
//繼承型變量
protected int mProtected;
-
局部變量
局部變量名以lowerCamelCase風格編寫,比起其它類型的名稱,局部變量名可以有更為寬松的縮寫。
雖然縮寫更寬松,但還是要避免用單字元進行命名,除了臨時變量和循環變量。
即使局部變量是final和不可改變的,也不應該把它示為常量,自然也不能用常量的規則去命名它。
- 臨時變量通常被取名為i、j、k、m和n,它們一般用于整型;c、d、e,它們一般用于字元型。 如:for (int i = 0; i < len ; i++)。
- 參數名以lowerCamelCase風格編寫。 參數應該避免用單個字元命名。
4.2.2 方法命名
- 類方法采用 小駝峰 命名法
- 根據函數所完成功能命名 , 如 changView()
- 在函數頭寫對于函數功能、參數和傳回值的注釋,如:
/**
* 擷取兩個數中最大的一個
*
* @param value1 參與比較的第一個數
* @param value2 參與比較的第二個數
* @return 兩個參數中最大的一個數
*/
public int max(int value1, int value2) {
return (value1 > value2) ? value1 : value2;
}
4.3 編碼習慣
4.3.1 不要忘記添加注釋
/**
* 擷取Sim卡營運商名稱
* <p>中國移動、如中國聯通、中國電信</p>
* @param context 上下文
* @return 移動網絡營運商名稱
*/
public static String getSimOperatorByMnc(Context context) {
---
}
4.3.2 不要忘記處理異常
void setServerPort(String value) {
try {
serverPort = Integer.parseInt(value);
} catch (NumberFormatException e) {
//處理異常結果
}
}
//不要像下面使用Exception類捕抓異常
try {
someComplicatedIOFunction(); // may throw IOException
someComplicatedParsingFunction(); // may throw ParsingException
// phew, made it all the way
} catch (Exception e) { // I'll just catch all exceptions
handleError(); // with one generic handler!
}
4.3.3 方法名稱不要太長
4.3.4 方法參數不要太多
4.3.5 方法行數不要太多。
4.3.6 更多規範可以參考code-style
5. 附錄
UI控件縮寫表
名稱 | 縮寫 |
---|---|
TextView | tv |
EditText | et |
ImageButton | ib |
Button | btn |
ImageView | iv |
ListView | lv |
GridView | gv |
GridLayout | gl |
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 |
新元件或自定義元件 | 可以根據情況 |
常見的英文單詞縮寫表
名稱 | 縮寫 |
---|---|
icon | ic (主要用在app的圖示) |
color | cl(主要用于顔色值) |
average | avg |
background | bg(主要用于布局和子布局的背景) |
selector | sel主要用于某一view多種狀态,不僅包括Listview中的selector,還包括按鈕的selector) |
buffer | buf |
control | ctrl |
default | def |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
infomation | info |
initial | init |
image | img |
Internationalization | I18N |
length | len |
library | lib |
message | msg |
password | pwd |
position | pos |
server | srv |
string | str |
temp | tmp |
window | wnd(win) |
參考
android官方手冊
Android包命名規範
Android 開發最佳實踐
Android 編碼規範
安卓開發規範(updating)
Android-Code-Style
android-guidelines
——powered by Sherchen
[pan=https://github.com/Sherchen/AndroidConventions]AndroidConventions [/pan]