#Android编码规范
##导语
>写代码如同写文章,作为文如其人,代码可以说是开发的脸面,写出简介规范的代码对个人,对团队都是非常重要的.对个人而言,简介规范的diamante不仅体现自己的专业性和技术水平,而且能够赢得别人的赞赏;对团队而言,团队成员遵循统一的规范,能够更好的维护代码库的稳定和谐.
---
#1. 命名规范
*分包
> 一个独立的功能,或者一个独立的模块定义在同一个包中,activity界面2个及以上,建议单独存放一个包
*包名
>包名命名规范:包名一律小写,采用如下规则:【com】.【公司名/组织名】.【项目名称】.【模块名】,例如:com.bidostar.xxx
#### 常见的包分层结构如下:
1.com.xx.应用名称缩写.模块.activity 页面用到的Activity类 (activitie层级名用户界面层)
2.com.xx.应用名称缩写.模块.fragment 页面用到的fragment
3.com.xx.应用名称缩写.模块.adapter 页面用到的Adapter类 (适配器的类)
4.com.xx.应用名称缩写.模块.util 此包中包含:公共工具方法类(util模块名)命名与第三方的utils作区分
5.com.xx.应用名称缩写.模块.bean 下面可分:vo(本地类)、bo(远程类)、dto(传递引用类)
6.com.xx.应用名称缩写.模块.model 此包中包含:模型类
7.com.xx.应用名称缩写.模块.presenter 此包中包含中介类
8.com.xx.应用名称缩写.模块.view 此包中包含UI控制类
9.com.xx.应用名称缩写.模块.contract 此包中包含契约类
10.com.xx.应用名称缩写.模块.db 数据库操作类
11.com.xx.应用名称缩写.模块.widget 自定义的View类等,与app业务相关的
12.com.xx.应用名称缩写.模块.service Service服务,后台服务
13.com.xx.应用名称缩写.模块.receiver BroadcastReceiver服务,接收通知
#### 例如登录模块
![登录功能](https://i.imgur.com/pxwN6D8.png)
*类名
##类名命名规范
>类名一律采用驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。
1.Activity 类 Activity为后缀标识 例如:欢迎页面类WelcomeActivity
2.Adapter类 Adapter 为后缀标识 例如:新闻详情适配器 NewDetailAdapter
3.工具方法类 Util为后缀标识(与系统或第三方的Utils区分)或功能+Util 例如:日志工具类 LogUtil(Logger也可)
4.管理类 Manager为后缀标识 例如: LocationManager
5.数据库类 以DBHelper后缀标识 例如:新闻数据库NewDBHelper
6.Service类 以Service为后缀标识 例如:时间服务JPushService
7.Receiver类 以Receiver为后缀标识 例如:推送接收JPushReceiver
8.ContentProvider 以Provider为后缀标识
9.自定义基类 以Base开头 例如:BaseActivity,BaseFragment
10.实体类 模块 + Bean 例如:UserBean
11.自定义view 功能描述 + View 例如:可以展开收缩的view,CollapsibleView
12.接口类 以I开头 例如:IUserLogin
13.实现类 以Impl结尾 例如:UserLoginImpl
#### 例如登录模块
![类名命名](https://i.imgur.com/zlvptjf.png)
*方法名
> 方法名通俗易懂
1.initXX() 初始化相关方法,使用init为前缀标识,如初始化布局initView()
2.isXX() checkXX() 方法返回值为boolean型的请使用is或check为前缀标识
3.getXX() 返回某个值的方法,使用get为前缀标识
4.handleXX() 对数据进行处理的方法,尽量使用handle为前缀标识
5.displayXX()/showXX() 弹出提示框和提示信息,使用display/show为前缀标识
6.saveXX() 与保存数据相关的,使用save为前缀标识
7.resetXX() 对数据重组的,使用reset前缀标识
8.clearXX() 清除数据相关的
9.removeXXX() 清除数据相关的
10.drawXXX() 绘制数据或效果相关的,使用draw前缀标识
*类属性名
>类属性名:
1.常量名
常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词
同类型的常量,通常放置在同一个内部类中
2.非常量字段名
非公有,非静态字段命名以m开头。 例如:int mUserAge;
3.JavaBean中的字段必须声明Private,并且定义getter/setter方法
4.静态字段命名以s开头。 private static UserBean sUserBean
5.集合添加如下后缀:List、Map、Set 例如:UserList
6.数组添加如下后缀:Arr 例如 UserArr
*xml文件名
>XML文件名
1.layout布局文件 activity_模块以activity开头 例如:用户列表activity_login.xml
2.fragment模块以fragment开头 例如用户信息:fragment_user_info.xml
3.Dialog命名:dialog描述.xml,例如:dialog_hint.xml
4.PopupWindow命名:ppw_描述.xml,例如:ppw_info.xml
5.列表项命名:模块item描述.xml
6.通用列表项:base_item_city.xml
7.listview:模块描述_list_item.xml
8.gridview:模块描述_grid_item.xml
9.recyclerview:模块描述_recycler_item_city.xml
10.自定义类似listview:TabLayout:模块描述_tab_item.xml
*资源文件名
>资源文件名全部小写,采用下划线命名法,加前缀区分,如果有多种形态 btn_xx.xml(normal、press、unselect、select)
>
>资源文件一定要放入规定的文件夹下,宽高/大小在dimens.xml文件中定义,字符串在strings.xml文件中定义,颜色值colors.xml文件中定义
>
> 命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成
1. ic:主要用于布局和子布局的图标 ic_模块描述 例如:ic_back.png
2. anim:用于定义动画文件 anim_描述xxx.xml 例如:anim_top_in.xml
3. selector:状态选择器或者shape文件:描述selector_xxx.xml
4. background背景文件:bg_描述_xxx.xml 例如:bg_round_blue.xml
5. image:主要用于静态图片 img_描述.png 例如:img_user_header.png
6. dimens:用于定义view控件的宽高,字体大小 宽高用dp,字体用sp,例如:dp_2/sp_2
7. color:用于定义颜色值 color_颜色值 例如:color_FFFFFF
*layout中id名
> layout中的id命名一律采用小写字母,view缩写+逻辑名称
| 控件 | 布局文件缩写 | 代码中缩写 |
| -----------------:|----------------------:|----------:|
| LinearLayout | ll |mLlFriend |
| RelativeLayout | rl |mRlMessage |
| FrameLayout | fl |mFlCart |
| TableLayout | tl |mTlCart |
| Button | btn |mBtnCart |
| TextView | tv |mTvCart |
| EditText | et |mEtCart |
| ListView | lv |mLvCart |
| GridView | gv |mGvCart |
...以此类推
*library库名
> library库名 第三方库统一采用xxxLibrary格式命名 例如:ZxingLibrary
> library的定义:第三方的依赖库,或者是自行写的提供一些共用API
1.library统一管理,例如即时判项目,所有的library都在librarys文件夹中定义
*module模块名
> module模块名模块统一采用xxxModule格式命名 例如:CarModule
> module定义:根据模块的独立性,或者模块中包含功能的多少来适当的抽取
1.所有的module统一管理,例如即时判项目所有的module都在mudules文件夹中定义
#2. 注释
> 注释就是让编码器不编译(不执行),在代码的编写过程中我们需要对一些程序进行注释,除了自己方便阅读,更为别人更好理解自己的程序,所以我们需要进行一些注释,可以是编程思路或者是程序的作用,总而言之就是方便自己他人更好的阅读。
####按照阿里编码规约
*行注释
*代码块注释
*文档注释