Android开发规范文档

作者: gyymz1993 | 来源:发表于2017-02-23 10:07 被阅读232次
    包名全部采用小写,不用下划线区分单词
    主包名采用[公司性质].[公司名称].[项目名称]的命名方式
    • 例如:翡翠教育做的手机助手包名edu.feicui.assistant
    通用功能子包名采用[主包名].[通用名称]的命名方式

    Android中常见命名规则

    包名

    包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
    采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名。

    包名 此包中包含
    com.xx.应用名称缩写.main 页面用到的Activity类 (activitie层级名用户界面层)
    com.xx.应用名称缩写.activity 页面用到的Activity类 (activitie层级名用户界面层)
    com.xx.应用名称缩写.base 基础共享的类
    com.xx.应用名称缩写.adapter 页面用到的Adapter类 (适配器的类)
    com.xx.应用名称缩写.util 此包中包含:公共工具方法类(util模块名)
    com.xx.应用名称缩写.bean 下面可分:vo、po、dto 此包中包含:JavaBean类
    com.xx.应用名称缩写.model 此包中包含:模型类
    com.xx.应用名称缩写.db 数据库操作类
    com.xx.应用名称缩写.view(或者 com.xx.应用名称缩写.widget ) 自定义的View类等
    com.xx.应用名称缩写.service Service服务
    com.xx.应用名称缩写.receiver BroadcastReceiver服务
    com.xx.应用名称缩写.prwd 首选项
    com.xx.应用名称缩写.provider 内容提供者

    类名

    类名都以UpperCamelCase风格编写。
    类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
    名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

    描述 例如
    Activity 类 Activity为后缀标识 欢迎页面类WelcomeActivity
    Adapter类 Adapter 为后缀标识 新闻详情适配器 NewDetailAdapter
    解析类 Parser为后缀标识 首页解析类HomePosterParser
    工具方法类 Util或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Util 线程池管理类:ThreadPoolManager日志工具类:LogUtil(Logger也可)打印工具类:PrinterUtil
    数据库类 以DBHelper后缀标识 新闻数据库:NewDBHelper
    Service类 以Service为后缀标识 时间服务TimeServiceBroadcast
    Receiver类 以Receiver为后缀标识 推送接收JPushReceiver
    ContentProvider 以Provider为后缀标识 1
    自定义的共享基础类 以Base开头 BaseActivity,BaseFragment

    方法名

    方法名都以 LowerCamelCase 风格编写。
    方法名通常是动词或动词短语。

    方法 说明
    initXX() 初始化相关方法,使用init为前缀标识,如初始化布局initView()
    isXX() checkXX() 方法返回值为boolean型的请使用is或check为前缀标识
    getXX() 返回某个值的方法,使用get为前缀标识
    handleXX() 对数据进行处理的方法,尽量使用handle为前缀标识
    displayXX()/showXX() 弹出提示框和提示信息,使用display/show为前缀标识
    saveXX() 与保存数据相关的,使用save为前缀标识
    resetXX() 对数据重组的,使用reset前缀标识
    clearXX() 清除数据相关的
    removeXXX() 清除数据相关的
    drawXXX() 绘制数据或效果相关的,使用draw前缀标识
    量词列表 量词后缀说明
    First 一组变量中的第一个
    Last 一组变量中的最后一个
    Next 一组变量中的下一个变量
    Prev 一组变量中的上一个
    Cur 一组变量中的当前变量。

    资源文件命名规范

    资源布局文件(XML文件(layout布局文件)):
    全部小写,采用下划线命名法
    contentview 命名
    必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
    所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
    将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。

    名称 描述 命名
    Dialog dialog_描述.xml dialog_hint.xml
    PopupWindow ppw_描述.xml ppw_info.xml
    列表项 item_描述.xml item_city.xml
    包含项 模块_(位置)描述.xml activity_main_head.xml、activity_main_bottom.xml

    UI控件缩写表

    控件 缩写 例子
    LinearLayout ll llFriend或者mFriendLL
    RelativeLayout rl rlMessage或mMessageRL
    FrameLayout fl flCart或mCartFL
    TableLayout tl tlTab或mTabTL
    Button btn btnHome或mHomeBtn
    ImageButton ibtn btnPlay或mPlayIBtn
    TextView tv tvName或mNameTV
    EditText et etName或mNameET
    ListView lv lvCart或mCartLV
    ImageView iv ivHead或mHeadIV
    GridView gv gvPhoto或mPhotoGV

    资源文件(图片drawable文件夹下):

    全部小写,采用下划线命名法,加前缀区分
    命名模式:可加后缀 small 表示小图, big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
    用途
    模块名
    逻辑名称
    用途模块名颜色
    用途逻辑名称
    用途
    颜色
    说明:用途也指控件类型(具体见UI控件缩写表)

    名称 命名
    btn_main_home.png 按键
    divider_maket_white.png 分割线
    ic_edit.png 图标
    bg_main.png 背景
    btn_red.png 红色按键
    btn_red_big.png 红色大按键
    ic_head_small.png 小头像
    bg_input.png 输入框背景
    divider_white.png 白色分割线

    如果有多种形态如按钮等除外如 btn_xx.xml(selector)

    功能 命名
    按钮图片使用btn_正常情况效果 btn_xx_normal
    按钮图片使用btn_点击时候效果 btn_xx_pressed
    state_focused聚焦效果 btn_xx_focused
    state_enabled (false)不可用效果 btn_xx_disabled
    state_checked选中效果 btn_xx_checked
    state_selected选中效果 btn_xx_selected
    state_hovered悬停效果 btn_xx_hovered
    state_checkable可选效果 btn_xx_checkable
    state_activated激活的 btn_xx_activated
    state_window_focused btn_xx_windowfocused
    背景图片使用bg_功能_说明 bg_head
    默认图片使用def_功能_说明 def_search_cell
    图标图片使用ic_功能_说明 ic_more_help
    具有分隔特征的图片使用seg_功能_说明 seg_list_line
    选择图标使用sel_功能_说明 sel_ok

    常见的英文单词缩写:

    名称 缩写
    icon ic (主要用在app的图标)
    color cl(主要用于颜色值)
    divider di(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)
    selector sl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
    average avg
    background bg(主要用于布局和子布局的背景)
    buffer buf
    control ctrl
    delete del
    document doc
    error err
    escape esc
    increment inc
    infomation info
    initial init
    image img
    length len
    library lib
    message msg
    password pwd
    position pos
    server srv
    string str
    temp tmp
    window wnd(win)
    一般功能子包名采用[主包名].[模块名称].[子模块名称]的命名方式。
    • 例如:手机助手的闹钟模块包名 edu.feicui.assistant.alarm
    只需导入用到的类,不得用*导入包下所有类
    导入类时,系统类在上方,自定义类在下方

    1 代码主要采用大/小驼峰命名法,即除首字母外,每个单词首字母大写,整体首字母大小根据其它规范决定

    2 类名、接口名、枚举名等首字母大写,若由多个单词组成,则其后每个单词首字母大写,例如:
    class ConfigManager{}

    3 类名、接口名、枚举名等首字母大写,若由多个单词组成,则其后每个单词首字母大写,例如:
    class ConfigManager{}

    4 继承自安卓组件的类,采用父类名作为后缀,例如:
    class LoginActivity extends Activity{}

    5 自定义异常必须以Exception结尾

    6 除for循环变量外,一律不得使用i、j、k等单字符作为变量名

    7 定义数组时方括号紧随在原始类型之后,数组名称一般使用复数形式,

    • 例如:int[] arrays;

    8 常量、枚举等均采用大写形式,用下划线区分各单词,

    • 例如:final static int DIALOG_ID_ALARM = 1;
      enum Season{SPRING, SUMMER, AUTUMN, WINTER};

    9 全局变量添加所有者前缀:实例成员变量前缀m(表示member),类静态变量前缀s(表示static),

    • 例如:实例变量mRun
      类静态变量sInstance

    10 控件变量添加组件前缀,顺序在所有者前缀之后,

    • 例如:全局名称mBtnNext
      局部名称btnNext
    常见控件前缀如下表:
    Paste_Image.png Paste_Image.png

    11 除单例模式外一般不得使用静态变量

    12 常量一般使用final static修饰,根据需要使用可见性修饰符,例如:
    public static final int VISIBLE = 0x00000000;

    13 一般方法名首字母小写,若由多个单词组成,则其后每个单词首字母大写

    14 构造方法采用递增方式(参数多的写在后面)

    • 例如:
      public GameView(Context context) {
          this(context, null);
      }
      public GameView(Context context, AttributeSet attrs) {
          this(context, attrs, 0);
      }
      public GameView(Context context, AttributeSet attrs, int defStyle) {}
    

    15 仅在项目内使用的实体类不使用JavaBean进行封装,直接将成员变量访问修饰符修改为非private,例如:
    class User{public String name,pwd;}

    16 实体类中固定值的成员变量可设置成final,并通过构造函数初始化

    17 实体类中不得随意修改的成员变量可添加下划线前缀以作区别,例如:
    class User{public int _id;}

    18 一般不使用System.out输出,而是使用Log中的方法

    19 使用BuildConfig.DEBUG标记对Log进行封装,只在调试时输出重要信息,正式版不输出

    20 一般try……catch只捕获需要的异常,catch块不得为空,至少应当将异常信息输出

    21 资源命名全部采用小写,各单词间以下划线区分

    22 布局文件采用[前缀]_[功能模块].xml的命名方式,

    • 例如:
      MainActivity的布局activity_main.xml]
    常见前缀如下表:
    Paste_Image.png

    23 图片采用[性质前缀][功能模块] [属性后缀].[扩展名]的方式,

    • 例如:
      主背景图片bg_main.png
      确定按钮按下btn_ok_presssed.png
    常见属性后缀如下表:
    Paste_Image.png
    values目录下文件名称较固定,不得随意更改,常见名称如下:
    Paste_Image.png

    1开源项目必须添加文件注释,非开源项目建议添加,例如:

    /*
      * @(#): Document.java
      * @project:IndentObjectNatation
      * @version: v1.1
      * @copyright: Copyright (C) 2013-2014 The Emerald Education
      * @description: 
      *         This file is a part of Indent Object Notation project.
      * 
      * @modify:
      * ---- No.1 Modified By Mr. Tang At 2014-05-06 11:32 Based On 1.0 ----
      *      Create this file.
      * ---- No.2 Modified By Mr. Zhang At 2014-05-06 11:32 Based On 1.0 ----
      *      Make the class Document extend from the class Node.
      */
    

    2类定义一般需要写类注释,接口一般需要写接口注释,如果没有文件注释,则需要在类注释和接口注释中标出作者,例如:

    /**
      * Root of the ION tree, provides the access to the   document's data.
      * <p>
      * Subclass of {@link Node}, Since elements, comments, etc. cannot exist
      * outside the context of a Document, the Document also contains the
      * factory methods needed to create these objects.
      * </p>
      * 
      * @author Mr. Zhang
      */
      class Document {}
    

    3成员变量、静态变量、常量等添加属性注释,例如:

     /** This view is invisible. */
     public static final int INVISIBLE = 0x00000004;
    

    4关联性较大的多个成员变量等可以共用同一条注释,例如:

    /** The width and height of View. */
     private int mWidth, mHeight;
    

    5public和protected方法必须添加方法注释,default和private方法建议添加方法注释,例如:

     /**
      * Writes {@code count} characters starting at {@code offset}     in {@code buf}
      * to the target.
      *
      * @param buf
      *            the non-null character array to write.
      * @param offset
      *            the index of the first character in {@code buf} to write.
      * @param count
      *            the maximum number of characters to write.
      * @return {@code true} if success, otherwise {@code false}
      * @throws IndexOutOfBoundsException
      *             if {@code offset < 0} or {@code count < 0}, or if {@code
      *             offset + count} is greater than the size of {@code buf}.
      * @throws IOException
      *             if this writer is closed or another I/O error occurs.
      */
       public abstract boolean write(char[] buf, int offset, int count) throws IndexOutOfBoundsException, IOException;
    

    6若覆盖基类的方法,则可以不写方法注释,但必须用@Override标出,例如:

     @Override
     protected void onCreate(Bundle savedInstanceState) {}
    

    7不建议继续使用的方法用@Deprecated标出

    8switch……case的每个条件一般添加简短说明,例如:

     switch (type) {
     case 1:// Android apps
           break;
     case 2:// Android games
           break;
     case 3:// iOS apps
           break;
     default:// Not a valid package
           break;
     }
    

    9 如果if的条件大于2个,则必须写注释,例如:

     if (isBluetooth // If Bluetooth network is on
                 || isWifi // If WLAN network is on
                 || is3g // if 3g network is on
       ) {}
    

    10 对于未完成的方法,使用TODO加以标记,例如:

    void write(byte[] buf, File file) {
      // TODO: Write buf to file
    }
    

    11 若功能已完成,但存在效率等潜在问题时,使用XXX加以标记,例如:

    void parseXML(File file) {
         // XXX: Maybe SAX is better
         DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
         Document doc = builder.parse(file);
     }
    

    12 若代码存在严重问题或仅用于调试,使用FIXME加以标记(注:存在FIXME标记的代码不能作为正式版发布)

    boolean login(String name, String pwd) {
          //FIXME: Remove this line before publishing
          System.out.println("name=" + name + ", password=" + pwd);
          if (users.containsKey(name) && users.get(name).equals(pwd))
          return true;
          return false;
     }
    

    13 如果for、while等代码块过长,可以在结尾处标记循环变量,例如:

    for (int position = 0; position < 10; position++) {
            ……
    }// end for: position
    while(mRun){
            ……
    }// end while: mRun

    相关文章

      网友评论

      本文标题:Android开发规范文档

      本文链接:https://www.haomeiwen.com/subject/rnbvwttx.html