Android 開發規范

  • Java類

    • 類名:大駝峰命名,所有單詞首寫字母大寫,并且類名最好為名詞.

      • 正確
      public class People{
      }
      public class School{
      }
      public class SchoolModel{
      }
      
      • 錯誤
      people,school,schoolmodel
      
      • 常用類命名
        • activity類,以Activity為后綴
        • fragment類,以Fragment為后綴
        • service類,以Service后綴
        • adapter類,以Adapter為后綴
        • 工具類,以Util為后綴
        • 實體類,命名以實際含義
        • 接口,以I為前綴(后續補充callback等命名)
    • 包名:全部單詞小寫用"."連接單詞,不使?用下劃線鏈接,

      • 正確:
      com.login.login,
      com.login.password
      
      • 錯誤
      com_login_login
      com_login_password
      
    • 局部變量:采用小駝峰,第一個單詞手寫字母小寫后面單詞首寫字母都大寫

      • 正確
      People people=new People();
      Man man=new Man();
      
      • 錯誤
      People People=new People();
      Man Man=new Man();
      
    • 全局變量:依然采用小駝峰命名,但是有些小的區別,第一個字母必須為小寫m后面加相應的單詞(依據Android源碼編寫)

      • 正確
      public People mPeople;
      public Man mMan;
      
      • 錯誤
      public People people;
      public Man Man;
      
      • PS:實體類中的成員變量不做m+限制,采用小駝峰命名規范,單詞拼接使用"_",如:

        public String year;
        public String name_count;
        public String school;
        

      后續補充全局boolean變量的命名
      - 常量命名:單詞所有字母大寫,并用下劃線拼接單詞,
      - 正確

        ````
        public static final String CONSTANT_CASE="constant_case";
        public static final int COUNTRY_CHINA=124;
        ````
      
      • 錯誤

        public static final String CONSTANT_case="constant_case";
        public static final int COUNTRY_china=124;
        
      • 常用常量定義規范:

        • intent filter相關常量
          - action:INTENT_ACTION_功能
          - category:INTENT_CATEGORY_功能
          - 字符串定義規范:"包名+功能(大駝峰)",如:"com.example.action.TIMETRAVEL"

        • 組件之間數據傳遞的鍵值

          • EXTRA_功能,確保將應用的軟件包名稱作為前綴,如:
          public static final String EXTRA_GIGAWATTS ="com.example.EXTRA_GIGAWATTS";
          
      • 用于startActivityForResult()和setResult的code常量:
        - REQUEST_CODE_功能
        - RESULT_CODE_功能

        • 常量位置定義規則:
          - 只限于當前類使用的常量,定義在當前類即可
          - 公共常量放在公共常量類
    • 方法命名:小駝峰,且盡量動詞開頭

      • 正確
      public void login();
      public void getHome();
      public void isLogin();
      
      • 錯誤
      public void Login();
      public void GetHome();
      
      • 常用方法命名
        • 初始化方法,命名以init開頭,如initView()
        • 按鈕點擊方法
        • 設置方法,以set開頭,如setData()
        • 具有返回值的獲取方法,以get開頭,如getData();
        • 通過異步加載數據的方法,以laod開頭,如loadData();
        • 布爾的判斷,命名以is或has開頭,如isCheck();
    • 方法參數命名:小駝峰命名,如

      public void login(String username,String password);
      public void isLogin(String loginName);
      
    • 命名規則:

      • 控件命名:

        • 全局:m+功能+View
        • 局部:功能+View;
        • 如:
        public Button mLoginView;
        public LinearLayout mLoginContainView;
        
        • ps:不采用:m+功能名+控件縮寫,功能+控件縮寫,的原因主要考慮很多控件縮寫重復,并且每添加一個自定義控件就需要定義一個控件縮寫很痛苦。特別是當一個控件為Button loginBtn ,當需求變更需要使用TextView,很多時候會忘修改修改縮寫。
      • 其他對象命名按照:全局變量和局部變量

  • Class 內部順序和邏輯

    • 每個 class 都應該按照一定的邏輯結構來排列基成員變量、方法、內部類等,從而達到良好的可讀性。

    • 總體上來說,要按照先 public, 后 protected, 最后 private, 函數的排布也應該有一個邏輯的先后順序,由重到輕。

    • 以下順序可供參考:

      • 定義TAG,一般為 private(可選)
      • 定義 public 常量
      • 定義 protected 常量、內部類
      • 定義 private 變量
      • 定義 public 方法
      • 定義 protected 方法
      • 定義 private 方法
    • 資源文件命名:

    • 圖片命名: 單詞全部小寫,用""拼接,命名規則:前綴名名字,前綴名名字狀態(后綴) 且圖片統一放在mipmap相對應的位置,

      • 如:

        bg_main.png、ic_search_press.png
        
      • 前綴,后綴表格

前綴 說明
ic icon 主要用于布局和子布局的圖標
bg background 主要用于布局和子布局的背景
div divider 主要用于分隔線,不僅包括Listview中的還包括普通布局中的線
后綴 說明
不加 圖片的狀態,代表普通狀態
pressed 圖片的狀態,代表按下狀態
selected 圖片的狀態,代表其所占的view被選中
disable 圖片的狀態,代表其所占的view沒有被選中
  • 布局文件命名:單詞全部小寫,采用"_"拼接,

    Activity 的 layout 以 module_activity 開頭
    Fragment 的 layout 以 module_fragment 開頭
    Dialog 的 layout 以 module_dialog 開頭
    include 的 layout 以 module_include 開頭
    ListView 的行 layout 以 module_list_item 開頭
    RecyclerView 的 item layout 以 module_recycle_item 開頭
    GridView 的行 layout 以 module_grid_item 開頭
    PopupWindow的layout以module_ppw開頭
    include的layout以module_include開頭
    stubview的layout以module_stubview開頭
    merge的layout以module_merge開頭
    menu的layout以module_menu開頭

  • 控件id命名:module_功能,

id=login_cancel
  • string資源文件命名:不要跟title、dialog、button等東西關系起來,全部寫入 module_strings.xml 文件中, 字符串以小寫單詞+下劃線的方式命名,采用以下規則:
模塊名_邏輯名稱
如:moudule_login_tips,module_homepage_notice_desc
  • colors資源使用#AARRGGBB 格式寫入 module_colors.xml 文件中命名規則:
模塊名_邏輯名稱_顏色
<color name="module_btn_bg_color">#33b5e5e5</color>
  • style 資源采用小寫單詞+下劃線方式命名,寫入 module_styles.xml 文件中, 采用以下規則:
父 style 名稱.當前 style 名稱
<style name="ParentTheme.ThisActivityTheme"> 
...
</style>
  • themes.xml
    - 命名:大駝峰,首單詞字母大寫,也可以用"."拼接,如以下兩種寫法都是規范的

     ````
     <style name="BaseActionBarTheme" parent="ThemeOverlay.AppCompat.ActionBar" />
     <!-- app 通用actionbar主題-->
     <style name="AppActionBarTheme" parent="BaseActionBarTheme">
         <item name="actionMenuTextAppearance">@style/ActionMenuText</item>
         <item name="actionMenuTextColor">@color/colorPrimaryText</item>
     </style>
     ````
    
  • dimen 資源以小寫單詞+下劃線方式命名,寫入 module_dimens.xml 文件中, 采用以下規則:

模塊名_描述信息
<dimen name="module_horizontal_line_height">1dp</dimen>
  • anim 資源名稱,命名規則:
模塊名_邏輯名稱_[方向|序號]
tween 動畫資源:盡可能以通用的動畫名稱命名,如 module_fade_in ,
 module_fade_out , module_push_down_in (動畫+方向);
frame 動畫資源:盡可能以模 塊+功能命名+序號。如:module_loading_grey_001
  • xml文件下
    • perference配置文件,功能_preferences.xml
  • drawable資源名稱:
模塊名_業務功能描述_控件描述_控件狀態限定詞
如:module_login_btn_pressed,module_tabs_icon_home_normal
  • 細節規范
    • 文件編碼:源文件編碼格式為UTF-8。

    • import不要使用通配符, 即,不要出現類似這樣的import語句:import java.util.*;

    • 重載:永不分離當一個類有多個構造函數,或是多個同名方法,這些函數/方法應該按順序出現在一起,中間不要放進其它函數/方法。

    • 判斷語句:

      • if, else, for, do, while語句一定要附帶大括號如:
      if(XXX){
      
      }else{
      
      }
      
      • 錯誤示例:
      If
      xxxx
      Else
      xxxx
      
- 每次只聲明一個變量,不要使用組合聲明,比如

````
錯誤  int year, name;
正確 int year;
    int name;
````

- switch塊內 default的情況要寫出來,每個switch語句都包含一個default語句組,即使它什么代碼也不包含。
  • 方法參數個數最多7個(構造函數盡量限制7個或者使用Builder模式)
  • 待討論
    • 一行代碼或者注釋限制為80到100字符,任何一行如果超過這個字符數限制,必須自動換行
    • 一個方法不能超過一屏,超過一屏則分解為多個方法
  • 注釋規范

    • 類注釋:每個類必須說明這個類是做什么的,不用寫作者名(讓每個人都可以修改這個類,避免添加其他人添加功能找原作者)

          /**
          * to do something?
          */
      public class AppActivity extends BaseActivity {}
      
    • 方法注釋:

      /**
       * 
       *@param key  鍵值
       *@param mObject  對象
       *@return  返回值
       */
      public String getName(String key,Object object){}
      
    • 常量注釋:

      /**
       * inten跳轉指定值
       */
      public static final int INTENT_APP=1001;
      
    • 實參注釋(視具體情況添加)

      getName(key/*實參注釋*/)
      
  • 接口定義方法,每個方法必須加注釋

    • 注意事項注釋
      - TODO 使用TODO來標記代碼,說明標識處有功能代碼待編寫
      - FIXME 使用FIXME來標記代碼,說明標識處代碼需要修正,甚至代碼是 錯誤的,不能工作,需要修復
      - XXX 使用XXX來標記代碼,說明標識處代碼雖然實現了功能,但是實現的方法有待商榷,希望將來能改進
  • 參考資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 請看完結版:Android開發規范(完結版)
    Blankj閱讀 8,627評論 25 115
  • 個人總結的 Android 開發規范,其中控件縮寫及 Android 資源文件命名部分不是很確定,有待商榷。Jav...
    牙鍋子閱讀 1,611評論 0 6
  • title: Android開發規范 摘要 1 前言 2 命名規范 3 資源文件規范 4 版本統一規范 5 第三方...
    大白棧閱讀 1,216評論 0 16
  • 包名全部采用小寫,不用下劃線區分單詞 主包名采用[公司性質].[公司名稱].[項目名稱]的命名方式 例如:翡翠教育...
    gyymz1993閱讀 3,158評論 1 29
  • 飯后和安喬童學習一下,然后就開始各自畫畫,都是什么花呢?
    Loura明珠閱讀 234評論 0 0