前言:
最近这段时间都很忙很忙啊,都没时间好好写博客了,除了工作、还有一堆私事,有点烦;最近在公司忙,也让我意识到了开发规范真的很重要,所以特意抽点时间来分享一下。
命名规范主要是通过标识符命名法和英文缩写规则来定义的,如下详解:
标识符命名法(主要四种):
1. 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写;
2. 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写;
3. 下划线命名法:单词与单词间用下划线做间隔。
4. 匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型。 量的取名方式为:<scope_> + <prefix_> + <qualifier>范围前缀,类型前缀,限定词。
英文缩写原则:
1. 较短的单词可通过去掉“元音”形成缩写;
2. 较长的单词可取单词的头几个字母形成缩写;
3. 此外还有一些约定成俗的英文单词缩写。
一.包名(packages):
采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或个人),三级包名根据应用进行命名,四级包名为模块名或层级名;
com.xx.应用名称缩写.activities |
页面用到的Activity类 (activities层级名用户界面层) |
com.xx.应用名称缩写.base |
页面中每个Activity类共享的可以写成一个i额BaseActivity类 (基础共享的类) |
com.xx.应用名称缩写.adapter |
页面用到的Adapter类 (适配器的类) |
com.xx.应用名称缩写.tools |
此包中包含:公共工具方法类(tools模块名) |
com.xx.应用名称缩写.bean (或com.xx.应用名称缩写.unity ) |
此包中包含:元素类 |
com.xx.应用名称缩写.db |
数据库操作类 |
com.xx.应用名称缩写.view (或com.xx.应用名称缩写.ui ) |
自定义的View类等 |
com.xx.应用名称缩写.service |
Service服务 |
com.xx.应用名称缩写.broadcast |
Broadcast服务 |
二.类名(classes):
名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
activity 类 |
Aty或者Activity为后缀标识 |
欢迎页面类WelcomeAty.或者WelcomeActivity |
Adapter类 |
Adp或者Adapte 为后缀标识 |
新闻详情适配器NewtDetailAdp或则直接 NewDetailAdapter |
解析类 |
Hlr为后缀标识 |
首页解析类HomePosterHlr |
公共方法类 |
Tools或Manager为后缀标识 |
线程池管理类:ThreadPoolManager |
数据库类 |
以DBHelper后缀标识 |
新闻数据库:NewDBHelper |
Service类 |
以Service为后缀标识 |
时间服务TimeService |
BroadcastReceive类 |
以Broadcast为后缀标识 |
时间通知TimeBroadcast |
ContentProvider |
以Provider为后缀标识 |
|
直接写的共享基础类 |
以Base开头 |
BaseActivity,BaseFragment |
三.接口(interface):
命名规则与类一样采用大驼峰命名法,多以able或ible结尾,如interface Runnable ; interface Accessible 。
四.方法名(methods):
动词或动名词,采用小驼峰命名法例如:onCreate(), run();
initXX() |
初始化相关方法,使用init为前缀标识,如初始化布局initView() |
isXX() |
checkXX()方法返回值为boolean型的请使用is或check为前缀标识 |
getXX() |
返回某个值的方法,使用get为前缀标识 |
processXX() |
对数据进行处理的方法,尽量使用process为前缀标识 |
displayXX() |
弹出提示框和提示信息,使用display为前缀标识 |
saveXX() |
与保存数据相关的,使用sav为e前缀标识 |
resetXX() |
对数据重组的,使用reset前缀标识 |
clearXX() |
清除数据相关的 |
removeXXX() |
清除数据相关的 |
drawXXX() |
绘制数据或效果相关的,使用draw前缀标识 |
五.常量名(constants):
全部大写,采用下划线命名法.例如:MIN_WIDTH。
六.变量名:(variables)
采用小驼峰命名法。类中控件名称必须与xml布局id保持一致。
非静态字段命名以 m 开头,表示 member,如:mRun;
静态字段命名以 s 开头,表示 static,如:sInstance;
公有非静态字段命名以 p 开头;
公有静态字段(全局变量)命名以 g 开头;
控件变量添加组件前缀,顺序在所有者前缀之后,例如:全局名称 mBtnNext,局部名称 btnNext。
Private int mPrivate;
protected int mProtected;
private static MyClass sSingleton;
public int pField;
public static in t gField;
除单例模式外一般不得使用静态变量;
构造方法采用递增方式(参数多的写在后面);
七.资源文件命名规范:
(一).图片drawable文件夹下:
全部小写,采用下划线命名法,加前缀区分。
命名模式:activity名称_逻辑名称/common_逻辑名称,如果有多种形态如按钮等除外如btn_xx.xml(selector)
btn_xx |
按钮图片使用btn_整体效果(selector) |
btn_xx_normal |
按钮图片使用btn_正常情况效果 |
btn_xx_press |
按钮图片使用btn_点击时候效果 |
bg_head |
背景图片使用bg_功能_说明 |
def_search_cell |
默认图片使用def_功能_说明 |
icon_more_help |
图标图片使用icon_功能_说明 |
seg_list_line |
具有分隔特征的图片使用seg_功能_说明 |
sel_ok |
选择图标使用sel_功能_说明 |
命名后缀:
unit |
在使用xml的tilemode来配图片时,element图片使用此后缀 |
nor |
图片的状态,代表普通状态 |
hl |
图片的状态,代表高亮状态 |
press |
图片的状态,代表按下状态 |
select |
图片的状态,代表其所占的view被选中 |
unselect |
图片的状态,代表其所占的view没有被选中 |
注意:
使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范。
(二).XML文件(layout布局文件):
全部小写,采用下划线命名法。
1 . contentview 命名
必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
例如:activity_main.xml
2. Dialog命名:dialog_描述.xml
例如:dialog_hint.xml
3.PopupWindow命名:ppw_描述.xml
例如:ppw_info.xml
4. 列表项命名:item_描述.xml
例如:item_city.xml
5.包含项命名:模块_(位置)描述.xml
例如:activity_main_head.xml、activity_main_bottom.xml
注意:通用的包含项命名采用:项目名称缩写_描述.xml
例如:xxxx_title.xml
(三).anim文件夹下:
全部小写,采用下划线命名法,加前缀区分。
前面为动画的类型,后面为方向
动画命名例子 |
规范写法 |
备注 |
fade_in |
淡入 |
|
fade_out |
淡出 |
|
push_down_in |
从下方推入 |
|
push_down_out |
从下方推出 |
|
push_left |
推像左方 |
|
slide_in_from_top |
从头部滑动进入 |
|
zoom_enter |
变形进入 |
|
slide_in |
滑动进入 |
|
shrink_to_middle |
中间缩小 |
|
(四).values中strings.xml,colors.xml等中的id命名:
命名模式:activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称
strings.xml中,使用activity名称注释,将文件内容区分开来
(五).layout中的id命名:
命名模式为:view缩写_模块名称 的逻辑名称 ,如:btn_login、et_input_phone
view的缩写详情如下:
控件 |
缩写 |
LayoutView |
lv |
RelativeView |
rv |
TextView |
tv |
Button |
btn |
ImageButton |
imgBtn |
ImageView |
mgView 或则 iv |
CheckBox |
chk |
RadioButton |
rdoBtn |
analogClock |
anaClk |
DigtalClock |
dgtClk |
DatePicker |
dtPk |
EditText |
et |
TimePicker |
tmPk |
toggleButton |
tglBtn |
ProgressBar |
pb |
SeekBar |
skBar |
AutoCompleteTextView |
autoTxt |
ZoomControls |
zmCtl |
VideoView |
vdoVi |
WebView |
webVi |
RantingBar |
ratBar |
Tab |
tab |
Spinner |
spn |
Chronometer |
cmt |
ScollView |
sclVi |
TextSwitch |
txtSwt |
ImageSwitch |
imgSwt |
listView |
lVi 或则lv |
ExpandableList |
epdLt |
MapView |
mapVi |
编码规范:
1. 源文件编码格式为 UTF-8;
2. java代码中不出现中文,最多注释中可以出现中文;
3. 服务端可以实现的,就不要放在客户端;
4. 引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大;
5. 处理应用全局异常和错误,将错误以邮件的形式发送给服务端;
6. 图片的.9处理;
7. 使用静态变量方式实现界面间共享要慎重;
8. 单元测试(逻辑测试、界面测试);
9. 不要重用父类的 handler,对应一个类的 handler 也不应该让其子类用到,否则会导致 message.what 冲突;
10. strings.xml中使用 %1$s 实现字符串的通配;
11. 数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断;
12. 对开源库的选取,一般都需要选择比较稳定的版本,作者在维护的项目,要考虑作者对issue的解决,以及开发者的知名度等各方面。选取之后,一定的封装是必要的。
代码提交规范:
无论使用的是Git,还是 SVN 都需要遵守下面这些规范;
1. 工作目录要及时更新,不要和服务器有太大的差别;
2. 提交代码时,如果出现冲突,必须仔细分析解决,不可以强行提交;
3. 提交代码之前先在本地进行测试,确保项目能编译通过,且能够正常运行,不可盲目提交;
4. 必须保证服务器上的版本是正确的,项目有错误时,不要进行提交;
5. 提交之前先更新;
6. 提交时注意不要提交本地自动生成的文件,比如我们Android Studio项目中的 idea、build文件夹是不需要提交的;
7. 不要提交自己不明白的代码;
8. 提前协调好项目组成员的工作计划,减少冲突;
9. 对提交的信息采用明晰的标注(写注释)。
更多精彩内容请关注本人博客:luoweichao.top
尊重原创,转载请注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵权必究!