地址: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 : ncuboy_045wsq@qq.com
* time : ${DATE}
* desc : xxxx描述
* version: 1.0
* </pre>
*/
每創建一個新的java文件,IDE就會自動加上,不要忘記修改desc, version等。
1.3 全局管理gradle變量。
一般都是在root project下面的build.gradle的文件末尾追加,比如我的
ext {
minSdkVersion = 9
targetSdkVersion = 22
buildToolsVersion = '25.0.2'
compileSdkVersion = 25
}
引用的時候,比如在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 | HomeActivity |
activity_home.xml |
Fragment | HomeTopFragment |
fragment_home_top.xml |
Dialog | HomeUpgradeDialog |
dialog_home_upgrade.xml |
AdapterView Item | item_csdn.xml |
|
include(通用組件) | include_list |
3.1.2 drawable命名
drawable 文件的命名規範
Asset Type | Prefix 前綴 | Example |
---|---|---|
Action bar | ab_ |
ab_stacked.9.png |
Button | btn_ |
btn_send_pressed.9.png |
Dialog | dialog_ |
dialog_top.9.png |
Divider | divider_ |
divider_horizontal.9.png |
Icon | ic_ |
ic_star.png |
Menu | menu_ |
menu_submenu_bg.9.png |
Notification | notification_ |
notification_bg.9.png |
Tabs | tab_ |
tab_pressed.9.png |
icons文件的命名規範
Asset Type | Prefix 前綴 | Example |
---|---|---|
Icons | ic_ |
ic_star.png |
Launcher icons | ic_launcher |
ic_launcher_calendar.png |
Menu icons and Action Bar icons | ic_menu |
ic_menu_archive.png |
Status bar icons | ic_stat_notify |
ic_stat_notify_msg.png |
Tab icons | ic_tab |
ic_tab_recent.png |
Dialog icons | ic_dialog |
ic_dialog_info.png |
選擇器狀態文件的命名規範
State | Suffix 尾綴 | Example |
---|---|---|
Normal | _normal |
btn_order_normal.9.png |
Pressed | _pressed |
btn_order_pressed.9.png |
Focused | _focused |
btn_order_focused.9.png |
Disabled | _disabled |
btn_order_disabled.9.png |
Selected | _selected |
btn_order_selected.9.png |
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 = 42;
//公有變量
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) |
參考
——powered by Sherchen
[pan=https://github.com/Sherchen/AndroidConventions]AndroidConventions [/pan]