1.命名规范
1.0 名词解释
①大驼峰式(big camel-case):每一个单词的首字母都大写。eg:String FirstName = string.Empty;
②小驼峰式(little camel-case):第一个单词首字母小写,后面其它单词首字母大写。eg:String firstName = string.Empty;
③匈牙利命名:开头字母用变量类型的缩写,其余部分用变量的英文货英文的缩写,要求单词首字母大写。eg:long lSum = 0;
1.1 包命名规范
包(package):采用反域名命名规则,全部使用小写字母。一级包名为com(cn/im),二级包名为公司域名,三级包名根据应用名称的含义进行命名,四级包名为核心公共包名和业务包名,五级包名模块名或层级名。
1.2 类命名规范
类(class):采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的,eg:HTML,URL等,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。
类 | 描述 | 例如 |
---|---|---|
Application类 | Application为后缀标识 | XXXApplication |
Activity类 | Activity为后缀标识 | 闪屏页面类:SplashActivity |
Fragment类 | Fragment为后缀标识 | 闪屏页面类:SplashFragment |
Service类 | Service为后缀标识 | 播放服务:PlayService |
BroadcaseReceiver类 | Receiver为后缀标识 | 时间通知:TimeReceiver |
ContentProvider类 | Provider为后缀标识 | 单词内容提供者:DictProvider |
工具类 | Utils为后缀标识 | 图片处理工具:BitmapUtils |
管理类 | Manager为后缀标识 | 播放器管理器:AudioManager |
工厂类 | Factory为后缀标识 | Fragment工厂:FragmentFactory |
1.3 变量命名规范
变量(variable):
普通类型:采用小驼峰命名法。
控件类型:类中控件名称必须与xml布局id保持一致。
公开的常量:定义为静态final,名称全部大写。
eg: public static final String ACTION_MAIN = ”android.intent.action.MAIN”;
1.4 接口命名规范
接口(interface):命名规则与类一样采用大驼峰命名法,多以able或ible结尾,eg:interface Runable; interface Accessible;
1.5 方法命名规范
方法(methods):动词或动名词,采用小驼峰命名法,eg:onCreate(),run();
方法 | 说明 |
---|---|
initXX() | 初始化相关方法,使用init为前缀标识,如初始化布局initView() |
isXX()/checkXX() | 返回值为boolean型的,请使用is或check为前缀标识 |
getXX() | 返回某个值的方法,使用get为前缀标识 |
processXX() | 对数据进行处理的方法,使用process为前缀标识 |
showXX() | 弹出提示信息,使用show或display为前缀标识 |
saveXX() | 与保存数据相关的方法,使用save为前缀标识 |
resetXX() | 与数据重组相关的方法,使用reset为前缀标识 |
clearXX() | 清除数据相关的方法,使用clear为前缀标识 |
removeXX() | 移除view相关的方法,使用remove为前缀标识 |
drawXX() | 绘制数据或效果相关的,使用draw前缀标识 |
1.6 布局文件命名规范
全部小写,采用下划线命名法
① contentview命名, Activity默认布局:act_功能模块.xml。eg:activity_main.xml、activity_more.xml
② Dialog命名:dialog_描述.xml。eg:dlg_hint.xml
③ PopupWindow命名:ppw_描述.xml。eg:ppw_info.xml
④ 列表项adapter子布局命名:listitem_功能模块_描述.xml。eg:listitem_task_city.xml
⑤ 包含项:include_模块.xml。eg:include_head.xml、include_bottom.xml
1.7 资源id命名规范
命名模式为:view缩写[模块名称][业务名称]_view的逻辑名称,eg:ll_main_content,imgBtn_main_right。
java中的控件名称和布局中id名称一致。
view缩写如下:
控件 | 缩写 | 控件 | 缩写 |
---|---|---|---|
View | view | LinearLayout | ll |
RelativeLayout | rl | FrameLayout | fl |
Button | btn | ImageButton | ib |
CheckBox | cb | RadioButton | rb |
RadioGroup | rg | DatePicker | date_pk |
EditText | et | TextView | tv |
TimePicker | time_pk | ProgressBar | pro_bar |
SeekBar | sk_bar | AutoCompleteTextView | auto_tv |
ZoomControls | zm_ctl | VideoView | vdo_vi |
WebView | web_vi | Tab | tab |
Spinner | spn | Chronometer | cmt |
ScrollView | scl_vi | TextSwitch | txt_swt |
ImageSwitch | img_swt | ListView | lv |
ExpandableList | epd_list | MapView | map_vi |
ViewPager | vi_pg | ImageView | iv |
1.8 动画文件命名
动画文件(anim文件夹下):全部小写,采用下划线命名法,加前缀区分,前面为动画的类型,后面为方向。
例子 | 规范写法 |
---|---|
fade_in | 淡入 |
fade_out | 淡出 |
push_down_in | 从下方推入 |
push_down_out | 从下方推出 |
push_left | 推向左方 |
slide_in_from_top | 从头部滑动进入 |
zoom_in | 变形进入 |
slide_in | 滑动进入 |
shrink_middle | 中间缩小 |
1.9 图片资源文件命名
全部小写,采用下划线命名法。
前缀/后缀 | 说明 |
---|---|
ic | 图标类(不具备点击功能) |
bg | 背景类 |
btn | 按钮类(具备点击功能) |
div | 分隔类 |
selector | 多种状态时,选择资源前缀 |
shape | 自绘资源图形资源前缀 |
normal | 区分状态时,默认状态后缀 |
pressed | 按下时的状态后缀 |
selected | 选中时的状态后缀 |
disable | 不可用时的状态后缀 |
1.10 values中资源命名规范
全部小写,采用下划线命名法。
color:
正常颜色:color_000000
半透明颜色:color_000000_88
dimens:
布局控件:layout_10
字号:text_size_10
strings:
模块名称_业务名称_功能名称_字符
eg. mine_message_content_title
2.注释规范
类文件必须添加注释,说明本类处理的功能。注释格式如下:
/**
* Description: 类说明
* Created by ${USER} on ${YEAR}-${MONTH}-${DAY} ${TIME}. Updated
* Author: YourName
* Email: YourEmail
* Version: V1.0
*/
复杂逻辑方法、抽象方法必须添加注释,说明本方法处理的逻辑功能。
复杂逻辑方法需添加内部注释,说明方法内部业务流程和代码行意义。
3.编码规范
3.1 类成员区顺序
- 常量区
- UI控件变量区
- 普通变量区
- 生命周期方法区
- 重载方法区
- 普通方法区
3.2 格式规范
3.2.1 大括号
1.使用大括号(即使是可选的)
大括号与if、else、for、do、while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上。
2.非空块
对于非空块和块状结构,大括号遵循 Kernighan 和 Ritchie 风格 (Egyptian brackets):
左大括号前不换行;
左大括号后换行;
右大括号前换行;
如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。
3.空块
可以使用简洁版本
一个空的块状结构里什么也不包含,大括号可以简洁地写成{},不需要换行。
例外:如果它是一个多块语句的一部分(if/else 或 try/catch/finally) ,即使大括号内没内容,右大括号也要换行。
3.2.2 变量声明
1.每次只声明一个变量
不使用组合声明,如int a, b;
2.需要时才声明,并尽快进行初始化
不要在一个代码块的开头把局部变量一次性都声明了(这是c语言的做法),而是在第一次需要使用它时才声明。 局部变量在声明时最好就进行初始化,或者声明后尽快进行初始化。
3.数组
非C风格的数组声明
中括号是类型的一部分:String[] args, 而非 String args[]
4.switch语句
每个switch语句都包含一个default语句组,即使它什么代码也不包含。
5.注解(Annotations)
①方法注解
注解紧跟在文档块后面,应用于类、方法和构造函数,一个注解独占一行。
②变量注解
没有特殊限制,也可以写成:
@Partial @Mock DataLoader loader;
6.Modifiers(修饰)
类和成员的modifiers如果存在,则按Java语言规范中推荐的顺序出现。
public protected private abstract static final transient volatile synchronized native strictfp