首页 > 代码库 > Android代码规范

Android代码规范

文章转载禁止用于商业用途,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处莫高雷草原以及作者@JiongBull。


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是模块的名称或功能的描述,单词必须全部小写,单词之间用下划线隔开。

类型模板事例
Activityactivity_name.xmlactivity_main.xml
Tabtab_name.xmltab_home.xml
Dialogdialog_name.xmldialog_login.xml
ListItemitem_name.xmlitem_contact.xml

8. ID的命名

组成名称的单词必须全部小写,单词之间用下划线隔开,名称不需要复杂的层级定位,只需要准确描述所代表控件的功能作用即可,通常我们在名称前使用控件类型的缩写前缀来避免重复起名的麻烦。

name是模块的名称或功能的描述。

类型模板事例
TextViewtv_name.xmltv_title.xml
EditTextet_name.xmlet_mail.xml
RelativeLayoutrlyt_name.xmlrlyt_login.xml
LinearLayoutllyt_name.xmlllyt_login.xml

控件类型缩写对照表

控件类型源文件中缩写资源文件中缩写
ViewVv
ButtonBtnbtn
ImageButtonIbtnibtn
RadioButtonRbtnrbtn
ToggleButtonTbtntbtn
CheckBoxChkchk
TextViewTvtv
EditTextEtet
ImageViewIviv
ListViewLvlv
ProgressBarPbarpbar
ScrollViewSclvsclv
RelativeLayoutRlytrlyt
LinearLayoutLlytllyt
TableLayoutTlyttlyt
FrameLayoutFlytflyt

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等文件中,只需对关键的类变量进行注释,方法建议全部添加注释。




Android代码规范