Android代码规范----一位2年外包开发者的心声

下面文章由于编译器排版问题可能导致错行,看格式化的请移步至我的github
github
里面有一个文件叫”Android代码规范”。


代码规范:(源文件编码格式为 UTF-8)
1.区块划分:

1.1 建议使用注释将源文件分为明显的区块,区块划分如下:
    1.常量声明区
    2.UI控件成员变量声明区
    3.普通成员变量声明区
    4.内部接口声明区
    5.初始化相关方法区
    6.事件响应方法区
    7.普通逻辑方法区
    8.重载的逻辑方法区
    9.发起异步任务方法区
    10.异步任务回调方法区
    11.生命周期回调方法区(出去onCreate()方法)
    12.内部类声明区

1.2 类成员排列通用规则:
    1.按照发生的先后顺序排列
    2.常量按照使用先后排列
    3.UI控件成员变量按照layout文件中的先后顺序排列
    4.普通成员变量按照使用的先后顺序排列
    5.方法基本上都按照调用的先后顺序在各自区块中排列
    6.相关功能作为小区块放在一起(或者封装掉)

1.3 重载:永不分离
    当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。

2.关于换行:

1.格式化代码
2.if else do while for 就算是有一个语句也要加大括号
3.逗号,等于号后换行,'.','&','|'前换行

3.命名:

3.1 不要组合声明,如:int a,b;要分开,像这样
    int a;
    int b;

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

    3.2.1:按照模块划分:
        包名                                                      此包中包含
        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服务
        注意:如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下

    3.2.2:按照功能划分:(以MVP为例)
        包名                                                     此包中包含
        com.xx.app                                              所有的功能
            com.xx.app.xxxx(功能1)                             功能1
                com.xx.app.xxxx.presenter                       IXxxPresenter XxxPresenterImpl
                com.xx.app.xxxx.model                           IXxxModel XxxModelImpl XxxModel
                com.xx.app.xxxx.view                            IXxxVView XxxViewImpl XxxActivity XXXFragment XxxAdapter
        com.xx.base                                             基础共享的类(BaseActivity)
        com.xx.util                                             公共工具方法类(TimeUtils)
        com.xx.db                                               数据库操作类
        com.xx.view(或者com.xx.widget)                         自定义view
        com.xx.service                                          Service
        com.xx.receiver                                         BroadcastReceiver
        com.xx.provider                                         ContentProvider
        com.xx.common

3.3 类名(大驼峰。e.g. FirstActivity)

    3.3.1接口:IXxx,实现类:XxxImpl。或者接口:Xxxable/Xxxible,实现类:XxxableImpl/XxxibleImpl
    3.3.2静态类:AbsXxx,实现类:同普通类
    3.3.3普通类:Xxx
    3.3.4枚举类:EnumXxx
    3.3.5注解类:Xxx
    3.3.6其他:同普通类
    3.3.7具体来讲:
        类                 描述                                                            例如
        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为后缀标识    
        自定义的共享基础类  以Base开头                                                      BaseActivity,BaseFragment
        测试类            测试的类的名称开始,以Test结束                                    HashTest 或 HashIntegrationTest

3.4 方法名(小驼峰。e.g.firstMethod)

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

3.5 字段名

    3.5.1 常量:全部字母大写,用下划线分隔单词。
          首先明确一点,final修饰的一定是常量。但是如果他的可观察状态可以改变,那么他就不是一个常量。

    3.5.2 非常量:小驼峰。e.g.firstField
          非公有,非静态字段命名以m开头。                              private int mPrivate;  protected int mProtected; 
          静态字段命名以s开头。                                       private static MyClass sSingleton;  
          公有非静态字段命名以p开头。                                  public int pField; 
          公有静态字段(全局变量)命名以g开头。                         public static int gField; 
    注意:public static final 字段(常量) 全部大写,并用下划线连起来。

    3.5.3 参数名:小驼峰

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

        3.6.1.2 Dialog命名:dialog_描述.xml
              例如:dialog_hint.xml

        3.6.1.3 PopupWindow命名:ppw_描述.xml
              例如:ppw_info.xml

        3.6.1.4 列表项命名:item_描述.xml
              例如:item_city.xml

        3.6.1.5 包含项命名:模块_(位置)描述.xml
              例如:activity_main_head.xml、activity_main_bottom.xml
              注意:通用的包含项命名采用:项目名称缩写_描述.xml
              例如:xxxx_title.xml

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

    3.6.3 动画文件(anim文件夹下):

        全部小写,采用下划线命名法,加前缀区分。
        具体动画采用以下规则:
        模块名_逻辑名称
        逻辑名称
        refresh_progress.xml
        market_cart_add.xml
        market_cart_remove.xml
        普通的tween动画采用如下表格中的命名方式
        // 前面为动画的类型,后面为方向

        动画命名例子                  规范写法
        fade_in                     淡入
        fade_out                    淡出
        push_down_in                从下方推入
        push_down_out               从下方推出
        push_left                   推向左方
        slide_in_from_top           从头部滑动进入
        zoom_enter                  变形进入
        slide_in                    滑动进入
        shrink_to_middle            中间缩小

    3.6.4 values中name命名:
        类别              命名                                                                          示例
        strings         strings的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称                  main_menu_about 主菜单按键文字friend_title 好友模块标题栏friend_dialog_del 好友删除提示login_check_email 登录验证
                                                                                                    dialog_title    弹出框标题
                                                                                                    button_ok       确认键 loading 加载文字
        colors          colors的name命名使用下划线命名法,采用以下规则:模块名+逻辑名称 颜色                friend_info_bg friend_bg transparent gray
        styles          styles的name命名使用 Camel命名法,采用以下规则:模块名+逻辑名称                    main_tabBottom

    3.6.5 layout中的id命名
          命名模式为:view缩写_view的逻辑名称

<附录>

表1 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


表2 常见的英文单词缩写:

名称                      缩写
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
Internationalization    I18N
length                  len
library                 lib
message                 msg
password                pwd
position                pos
server                  srv
string                  str
temp                    tmp
window                  wnd(win)

参考:
google官方
国内翻译

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值