Android代码规范
- 开始之前请详细阅读并遵守Android开发者代码风格指南
- 不要使用拼音命名
- 名称应简洁而富于描述,使用完整单词,避免使用缩写(除非该缩写被更广泛使用,例如URL、HTML)
- 代码中不要出现中文标点字符,例如:‘,’、‘:’
- 注释中可以书写中文标点字符,便于阅读
- 注释遵循英文写作习惯,英文标点符号后空一格,避免句子紧凑
- 颜色色值的字母必须全部大写
命名规则
1. 包命名
包名由小写的字母组成,默认以com.huashengrun.android.betterus
开头,然后接上根据功能划分的模块名。
com.huashengrun.android.betterus.ui
com.huashengrun.android.betterus.ui.widget
2. 类和接口命名
名称的首字母需要大写,如果由多个单词组成,那么每个单词的首字母需要大写,其他字母小写。
class LoginActivity
interface OnClickListener
3. 方法的命名
采用驼峰命名法来命名。
public String getName()
public boolean isExist()
4. 变量的命名
采用驼峰命名法命名。
- 非公共的、非静态的域变量用m前缀
- 静态域变量用s前缀
- 集合类型的变量使用复数形式,若多种集合类型的变量存储的是相同类型的对象,除了根据功能区分,也可以简单通过集合类型来区分
public class User {
private int mId;
private static User sUser;
String mName;
protected int mAge;
public int level;
public List<Company> companies;
public List<Score> listScores;
public Score[] arrScores;
}
5. 常量的命名
常量需要声明为final static形式,组成名称的单词必须全部大写,单词之间用下划线隔开。
private static final int FADE_IN_TIME = 200;
6. 异常的命名
名称必须以Exception
结尾。
NullPointerException
7. 布局的命名
name是模块的名称或功能的描述,单词必须全部小写,单词之间用下划线隔开。
类型 | 模板 | 事例 |
---|---|---|
Activity | activity_name.xml | activity_main.xml |
Tab | tab_name.xml | tab_home.xml |
Dialog | dialog_name.xml | dialog_login.xml |
ListItem | item_name.xml | item_contact.xml |
8. ID的命名
组成名称的单词必须全部小写,单词之间用下划线隔开,名称不需要复杂的层级定位,只需要准确描述所代表控件的功能作用即可,通常我们在名称前使用控件类型的缩写前缀来避免重复起名的麻烦。
name是模块的名称或功能的描述。
类型 | 模板 | 事例 |
---|---|---|
TextView | tv_name.xml | tv_title.xml |
EditText | et_name.xml | et_mail.xml |
RelativeLayout | rlyt_name.xml | rlyt_login.xml |
LinearLayout | llyt_name.xml | llyt_login.xml |
控件类型缩写对照表
控件类型 | 源文件中缩写 | 资源文件中缩写 |
---|---|---|
View | V | v |
Button | Btn | btn |
ImageButton | Ibtn | ibtn |
RadioButton | Rbtn | rbtn |
ToggleButton | Tbtn | tbtn |
CheckBox | Chk | chk |
TextView | Tv | tv |
EditText | Et | et |
ImageView | Iv | iv |
ListView | Lv | lv |
ProgressBar | Pbar | pbar |
ScrollView | Sclv | sclv |
RelativeLayout | Rlyt | rlyt |
LinearLayout | Llyt | llyt |
TableLayout | Tlyt | tlyt |
FrameLayout | Flyt | flyt |
9. 图片的命名
name是模块的名称或功能的描述。
图片名称一般由模块名称/功能描述 + 后缀组成,后缀是可选的。
前缀 | 描述 | 示例 |
---|---|---|
ic_ | 图标 | ic_launcher.png |
bg_ | 背景图片 | bg_title.png |
sl_ | 状态图片 | sl_button.png |
后缀 | 描述 | 示例 |
---|---|---|
无 | 普通状态 | login.png |
_p | 按压状态 | login_p.png |
_c | 选中状态 | login_c.png |
_d | 不可用状态 | login_d.png |
10. 其他资源命名
遵循见名知意的原则,组成名称的单词必须全部小写,单词之间用下划线隔开。
<string name="welcome">欢迎</string>
<color name="white">#FFFFFF</color>
注释
养成良好的注释习惯,对提升自己的编程能力和团队合作能力有很大的益处。
1. 文件注释
源文件的开头需要注释说明当前的文件信息,包括文件名、作者、版本信息、日期、修改记录等。
/*
* -----------------------------------------------------------------
* Copyright (C) 2007-2014, by HuaShengRun, Shenzhen, All rights reserved.
* -----------------------------------------------------------------
*
* File: RequestManager.java
* Author: JiongBull
* Version: 1.0
* Create: 2014-8-10
*
* Changes (from 2014-8-10)
* -----------------------------------------------------------------
* 2014-8-10 : 创建 RequestManager.java (JiongBull);
* -----------------------------------------------------------------
*/
2. 类注释
在类的开头添加类信息的描述.
/**
* 管理Volley的Request, 使用之前需要调用init()进行初始化.
*/
public class RequestManager {
}
3. 方法注释
一般情况下需要为每个方法添加注释,包括方法的功能描述,参数信息、返回值、异常信息等,有些约定俗成的方法可以不需要添加注释,请参考约定俗成
的说明。
/**
* 输出日志.
*
* @param context Context
* @param logLevel 日志等级
* @param tag 标签
* @param content 输出内容
* @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";/**
* 网络请求队列.
*/
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注释
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
<!-- Customize your theme here. -->
</style>
约定俗成
1. get / set 方法的注释
通过IDE工具批量生成域变量的 get / set 方法可以不用注释。
2. 第三方库生成代码的注释
第三方库生成的代码可以不用注释,例如greenDao生成的代码。
3. 通用类的注释
通用类的公共方法应全部添加注释。
4. 一般情况下的注释
例如在activity、service等文件中,只需对关键的类变量进行注释,方法建议全部添加注释。
转载须注明出处莫高雷草原以及作者@JiongBull。