天天看點

總結下android開發規範

位址: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的介紹

總結下android開發規範

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 視圖如下

總結下android開發規範

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)命名

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