總結下android開發規範

地址:https://github.com/Sherchen/AndroidConventions

1. AS規範

在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結束。例如:HashTestHashIntegrationTest

接口(interface):命名規則與類一樣採用大駝峯命名法,多以able或ible結尾,如
interface Runnableinterface Accessible

4.2 Java編碼規範

4.2.1 字段(field)命名

  • 類字段,包括變量和常亮
    1. 公有變量按 小駝峯 法命名
    2. 私有 & 非靜態成員變量以 m 開頭
    3. 私有 & 靜態成員變量以 s 開頭
    4. 常量以大寫字母和下劃線 _ 組成
    5. 儘量使用 類型+功能/描述的模式 ,如 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)

參考

android官方手冊

Android包命名規範

Android 開發最佳實踐

Android 編碼規範

安卓開發規範(updating)

Android-Code-Style

android-guidelines

            ——powered by Sherchen

[pan=https://github.com/Sherchen/AndroidConventions]AndroidConventions [/pan]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章