开始之前请详细阅读并遵守Android开发者代码风格指南不要使用拼音命名名称应简洁而富于描述,使用完整单词,避免使用缩写(除非该缩写被更广泛使用,例如URL、HTML)代码中不要出现中文标点字符,例如:‘,’、‘:’注释中可以书写中文标点字符,便于阅读注释遵循英文写作习惯,英文标点符号后空一格,避免句子紧凑颜色色值的字母必须全部大写
命名规则
1. 包命名
包(packages):采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xxx(可以是公司域名或者个人命名),三级包名根据应用进行命名,四级包名为模块名或层级名。
包名 | 说明 |
---|---|
com.xxx.应用名称缩写.activities | Activity类 |
com.xxx.应用名称缩写.fragment | Fragment类 |
com.xxx.应用名称缩写.base | BaseActivity类(基础共享的类) |
com.xxx.应用名称缩写.adapter | Adapter类 |
com.xxx.应用名称缩写.utils | 此包中包含:公共工具方法类(包含日期、网络、存储、日志等工具类) |
com.xxx.应用名称缩写.bean(model/domain均可) | 实体类 |
com.xxx.应用名称缩写.db | 数据库操作 |
com.xxx.应用名称缩写.view(或.ui | 自定义的View类等 |
com.xxx.应用名称缩写.service | Service服务 |
com.xxx.应用名称缩写.broadcast | Broadcast广播 |
com.xxx.应用名称缩写.net | 网络相关 |
2. 类命名
类(classes):采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。
类 | 描述 | 例如 |
---|---|---|
Application类 | Application为后缀标识 | XXXApplication |
Activity类 | Activity为后缀标识 | 闪屏页面类SplashActivity |
解析类 | Handler为后缀标识 | |
公共方法类 | Utils或Manager为后缀标识 | 线程池管理类:ThreadPoolManager;日志工具类:LogUtils |
数据库类 | 以DBHelper后缀标识 | MySQLiteDBHelper |
Service类 | 以Service为后缀标识 | 播放服务:PlayService |
BroadcastReceiver类 | 以Broadcast为后缀标识 | 时间通知:TimeBroadcast |
ContentProvider类 | 以Provider为后缀标识 | 单词内容提供者:DictProvider |
直接写的共享基础类 | 以Base为前缀 | BaseActivity;BaseFragment |
3. 方法的命名
方法(methods):动词或动名词,采用小驼峰命名法
onCreate();
run();
方法 | 说明 |
---|---|
initXX() | 初始化相关方法,使用init为前缀标识,如初始化布局initView() |
isXX() | checkXX()方法返回值为boolean型的请使用is或check为前缀标识 |
getXX() | 返回某个值的方法,使用get为前缀标识 |
processXX() | 对数据进行处理的方法,尽量使用process为前缀标识 |
displayXX() | 弹出提示框和提示信息,使用display为前缀标识 |
saveXX() | 与保存数据相关的,使用save为前缀标识 |
resetXX() | 对数据重组的,使用reset前缀标识 |
clearXX() | 清除数据相关的 |
removeXX() | 清除数据相关的 |
drawXXX() | 绘制数据或效果相关的,使用draw前缀标识 |
4. 变量的命名
变量(variables):采用小驼峰命名法。类中控件名称必须与xml布局id保持一致。
公开的常量:定义为静态final,名称全部大写
public staticfinal String ACTION_MAIN="android.intent.action.MAIN";
静态变量:名称以s开头
private static long sInstanceCount = 0;
非静态的私有变量、protected的变量:以m开头
private Intent mItent;
5. 接口的命名
接口(interface):命名规则与类一样采用大驼峰命名法,多以able或ible结尾
interface Runable; interface Accessible;
6. 异常的命名
名称必须以Exception结尾。
NullPointerException
7. 布局文件的命名
全部小写,采用下划线命名法。
名称 | 事例 |
---|---|
功能模块 | main.xml;more.xml;settings.xml |
activity_功能模块 | activity_main.xml;activity_more.xml |
Dialog命名:dialog_描述.xml | dlg_hint.xml |
PopupWindow命名:ppw_描述.xml | ppw_info.xml |
列表项命名listitem_描述.xml | listitem_city.xml |
包含项:include_模块.xml | include_head.xml;include_bottom.xml |
dapter的子布局:功能模块_item.xml | main_item.xml |
8. 资源ID的命名
命名模式为:view缩写_模块名称_view的逻辑名称
控件 | 缩写 |
---|---|
RelativeLayout | rlyt |
LinearLayout | llyt |
TableLayout | tlyt |
FrameLayout | flyt |
TextView | tv |
EditText | et |
Button | btn |
ImageButton | ibtn |
RadioButton | rbtn |
ToggleButton | tbtn |
CheckBox | chk |
View | v |
ImageView | iv |
ListView | lv |
ScrollView | sclv |
ProgressBar | pbar |
9. 图片的命名
name是模块的名称或功能的描述。
图片名称一般由模块名称/功能描述 + 后缀组成,后缀是可选的。
命名 | 说明 |
---|---|
bg_xxx | 这种图片一般那些比较大的图片,比如作为某个Activity的背景等 |
btn_xxx | 按钮,一般用于按钮,而且这种按钮没有其他状态 |
ic_xxx | 图标,一般用于单个图标,比如启动图片ic_launcher |
sl_xxx | 状态图片 |
bg_描述状态1[状态2] | 用于控件上的不同状态 |
btn_描述状态1[状态2] | 用于按钮上的不同状态 |
chx_描述状态1[状态2] | 选择框,一般有2态和4态 |
10. 动画文件命名
动画文件(anim文件夹下):全部小写,采用下划线命名法,加前缀区分。前面为动画的类型,后面为方向。
动画命名 | 备注 |
---|---|
fade_in | 淡入 |
fade_out | 淡出 |
push_down_in | 从下方推入 |
push_down_out | 从下方推出 |
push_left | 推像左方 |
slide_in_from_top | 从头部滑动进入 |
zoom_enter | 变形进入 |
slide_in | 滑动进入 |
shrink_to_middle | 中间缩小 |
注释
养成良好的注释习惯,对提升自己的编程能力和团队合作能力有很大的益处。
1. 文件注释
源文件的开头需要注释说明当前的文件信息,包括文件名、作者、版本信息、日期、修改记录等。
*
1. -----------------------------------------------------------------
2. Copyright (C) 2007-2014, by HuaShengRun, Shenzhen, All rights reserved.
3. -----------------------------------------------------------------
4. 5. File: RequestManager.java
6. Author: JiongBull
7. Version: 1.0
8. Create: 2014-8-10
9. 10. Changes (from 2014-8-10)
11. -----------------------------------------------------------------
12. 2014-8-10 : 创建 RequestManager.java (JiongBull);
13. -----------------------------------------------------------------
*/
2 类注释
在类的开头添加类信息的描述.
/**
1. 管理Volley的Request, 使用之前需要调用init()进行初始化.
*/
public class RequestManager {
}
3. 方法注释
一般情况下需要为每个方法添加注释,包括方法的功能描述,参数信息、返回值、异常信息等,有些约定俗成的方法可以不需要添加注释,请参考约定俗成的说明。
/**
1. 输出日志.
2. 3. @param context Context
4. @param logLevel 日志等级
5. @param tag 标签
6. @param content 输出内容
7. @param throwable 异常信息, 若没有异常可为空
*/
private static void trace(final Context context, final int logLevel, final String tag, final String content, final Throwable throwable) {
...
}
4. 域变量和常量注释
/**
* 日志的扩展名.
*/
public static final String LOG_EXTENSION = ".log";
/**
1. 网络请求队列.
*/
private RequestQueue mRequestQueue;
5. 其他注释
- 单行注释
view.setImageResource(defaultImageResId); // 无图片显示默认图片
- 区块注释
/* 网络图片添加渐变动画 */
Resources resource = mContext.getResources();
final TransitionDrawable transitionDrawable =
new TransitionDrawable(new Drawable[] {
new ColorDrawable(android.R.color.transparent),
new BitmapDrawable(resource, bmpResponse)
});
view.setBackgroundResource(defaultImageResId);
view.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(RequestManager.FADE_IN_TIME);
6. XML注释
约定俗成
1. get / set 方法的注释
通过IDE工具批量生成域变量的 get / set 方法可以不用注释。
2. 第三方库生成代码的注释
第三方库生成的代码可以不用注释,例如greenDao生成的代码。
3. 通用类的注释
通用类的公共方法应全部添加注释。
4. 一般情况下的注释
例如在activity、service等文件中,只需对关键的类变量进行注释,方法建议全部添加注释