标识符命名法
标识符命名法最主要有三种:
驼峰
命名法 - 又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。帕斯卡
命名法 - 又称大驼峰命名法,所有单词的第一个字母大写。下划线
命名法 - 单词与单词间用下划线做间隔。
英文缩写原则:
名称 | 缩写 |
---|---|
icon | ic (主要用在app的图标) |
color | cl(主要用于颜色值) |
divider | di(主要用于分隔线,包括Listview中的divider和普通布局中的线) |
selector | sl(主要用于某一view多种状态,包括Listview和按钮中的selector) |
background | bg(主要用于布局和子布局的背景) |
average | avg |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
information | info |
initial | init |
image | img |
Internationalization | I18N |
length | len |
library | lib |
message | msg |
password | pwd |
position | pos |
server | srv |
string | str |
temp | tmp |
window | win |
注意! 在程序中我们一般不使用缩写,除非该缩写是约定俗成的。
命名规范
包(packages)
采用反域名命名规则,全部使用小写字母。一级包名为com
,二级包名为xx
(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名:
包名 | 此包中包含 |
---|---|
com.xx.应用名称缩写.activities | 页面用到的Activity类 (activities层级名用户界面层) |
com.xx.应用名称缩写.base | 页面中每个Activity类共享的可以写成一个BaseActivity类 (基础共享的类) |
com.xx.应用名称缩写.adapter | 页面用到的Adapter类 (适配器的类) |
com.xx.应用名称缩写.tools | 公共工具方法类(tools模块名) |
com.xx.应用名称缩写.bean | 元素类 |
com.xx.应用名称缩写.db | 数据库操作类 |
com.xx.应用名称缩写.view | 自定义的View类等 |
com.xx.应用名称缩写.service | Service服务 |
com.xx.应用名称缩写.broadcast | Broadcast服务 |
类(classes)
名词,采用大驼峰
命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写:
类 | 描述 | 例如 |
---|---|---|
activity 类 | Activity为后缀标识 | 欢迎页面类WelcomeActivity |
fragment类 | Fragment为后缀标识 | 首页列表类HomeListFragment |
Adapter类 | Adapte为后缀标识 | 新闻详情适配器NewDetailAdapter |
解析类 | Hlr为后缀标识 | 首页解析类HomePosterHlr |
公共方法类 | Tools或Manager为后缀标识 | 线程池管理类:ThreadPoolManager, 日志工具类:LogTools |
数据库类 | 以DBHelper后缀标识 | 新闻数据库:NewDBHelper |
Service类 | 以Service为后缀标识 | 时间服务TimeService |
BroadcastReceive类 | 以Broadcast为后缀标识 | 时间通知TimeBroadcast |
ContentProvider类 | 以Provider为后缀标识 | 日记DiaryProvider |
直接写的共享基础类 | 以Base开头 | BaseActivity,BaseFragment |
接口(interface)
命名规则与类一样采用大驼峰命名法
,多以Listener
结尾,例如:interface LogoutDialogClickListener
。
方法(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前缀标识 |
变量(variables)
采用小驼峰命名法
。类中控件名称必须与xml布局id保持一致。
用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst
和strCustomerLast
,而不要使用strFirstCustomer
和strLastCustomer
。
量词列表:量词后缀说明:
- First - 一组变量中的第一个
- Last - 一组变量中的最后一个
- Next - 一组变量中的下一个变量
- Prev - 一组变量中的上一个
- Cur - 一组变量中的当前变量
常量(constants)
全部大写,采用下划线命名法。例如:MIN_WIDTH
资源文件(drawable folder)
全部小写,采用下划线命名法,加前缀区分。
命名模式:activity名称逻辑名称逻辑名称
如果有多种形态如按钮等除外如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 | 选择图标使用se功能说明 |
命名后缀:
后缀 | 说明 |
---|---|
unit | 在使用xml的tilemode来配图片时,element图片使用此后缀 |
nor | 图片的状态,代表普通状态 |
hl | 图片的状态,代表高亮状态 |
press | 图片的状态,代表按下状态 |
select | 图片的状态,代表其所占的view被选中 |
unselect | 图片的状态,代表其所占的view没有被选中 |
资源布局文件(XML layout)
全部小写,采用下划线命名法。
Contentview
命名,Activity
默认布局,以去掉后缀的Activity类进行命名。不加后缀:activity_功能模块.xml
,例如:activity_main.xml、activity_more.xml、activity_settings.xml。Fragment
命名:fragment_描述.xml
,例如:fragment_main.xml。Dialog
命名:dialog_描述.xml
,例如:dialog_hint.xml。PopupWindow
命名:ppw_描述.xml
,例如:ppw_info.xml。- 列表项命名:
listitem_描述.xml
,例如:listitem_city.xml。 - 包含项:
include_模块.xml
,例如:include_head.xml、include_bottom.xml。
动画文件(anim folder)
全部小写,采用下划线命名法,加前缀区分。
动画命名例子 | 规范写法 |
---|---|
fade_in | 淡入 |
fade_out | 淡出 |
push_down_in | 从下方推入 |
push_down_out | 从下方推出 |
push_left | 推向左方 |
slide_in_from_top | 从头部滑动进入 |
zoom_enter | 变形进入 |
slide_in | 滑动进入 |
shrink_to_middle | 中间缩小 |
资源ID(resourcesid)
大小写规范与方法名一致,采用小驼峰命名法。命名规范为“资源控件的缩写名”+“变量名”
。注意:页面控件名称应该和控件id名保持一致。
strings.xml,colors.xml等中的id命名:
命名模式:activity名称_功能模块名称_逻辑名称
。
strings.xml
中,使用activity
名称注释,将文件内容区分开来。
layout中的id命名
命名模式为:view缩写_模块名称_view的逻辑名称
。
view的缩写详情如下:
控件 | 缩写 |
---|---|
LayoutView | lv |
RelativeView | rv |
TextView | tv |
Button | btn |
ImageButton | imgBtn |
ImageView | imgView |
CheckBox | chk |
RadioButton | rdoBtn |
AnalogClock | anaClk |
DigtalClock | dgtClk |
DatePicker | dtPk |
EditText | edtTxt |
TimePicker | tmPk |
ToggleButton | tglBtn |
ProgressBar | proBar |
SeekBar | skBar |
AutoComplete TextView | autoTxt |
ZoomControls | zmCtl |
VideoView | vdoVi |
WebView | webVi |
RantingBar | ratBar |
Tab | tab |
Spinner | spn |
Chronometer | cmt |
ScollView | sclVi |
TextSwitch | txtSwt |
ImageSwitch | imgSwt |
ListView | lv |
ExpandableList | epdLt |
MapView | mapVi |
activity中的view变量命名
命名模式为:逻辑名称+view缩写
。
建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view。
styles.xml
将layout中不断重现的style
提炼出通用的style通用组件
,放到styles.xml
中。
Android编码规范建议
- java代码中不出现中文,最多注释中可以出现中文
- 局部变量命名、静态成员变量命名只能包含字母,单词首字母除第一个外,都为大写,其他字母都为小写
- 常量命名只能包含字母和,字母全部大写,单词之间用隔开
- 图片尽量分拆成多个可重用的图片
- 服务端可以实现的,就不要放在客户端
- 引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
- 处理应用全局异常和错误,将错误以邮件的形式发送给服务端
- 图片的.9处理
- 使用静态变量方式实现界面间共享要慎重
- Log(系统名称模块名称接口名称,详细描述)
- 单元测试(逻辑测试、界面测试)
- 不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
- activity中在一个View.OnClickListener中处理所有的逻辑
- strings.xml中使用%1$s实现字符串的通配
- 如果多个Activity中包含共同的UI处理,那么可以提炼一个CommonActivity,把通用部分叫由它来处理,其他activity只要继承它即可
- 使用button+activitgroup实现tab效果时,使用Button.setSelected(true),确保按钮处于选择状态,并使activitygroup的当前activity与该button对应
- 如果所开发的为通用组件,为避免冲突,将drawable/layout/menu/values目录下的文件名增加前缀
- 数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断