1.前言
- 为了能够更好的阅读和美观,现对Android端代码进行统一规范。该文档参考
阿里开发手册
2.命名规范
2.1 文件编码
- 源文件编码格式采用UTF-8
2.2 包名
- 项目包名采用倒网址方式命名方式,”com”+公司简写+项目名
com.yxzc.community
2.3 变量名
-
Java变量名、类名严格按照驼峰法命名。
-
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
-
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
-
正确的英文拼写和语法可以让阅读者易于理解,避免歧义
-
需要时才声明,并尽快进行初始化
-
不要使用组合声明,比如int a, b;。
-
例如:
private int mBitmapWidth;
private int mBitmapHeight;
private float mDrawableRadius;
private float mBorderRadius;
2.4 资源文件名
- 布局文件名、图片文件名、资源id等,皆由小写字母+数字+下划线组成,不能又数字打头,多个单词由下划线隔开
- 全部小写,采用下划线命名法
2.4.1 contentview 命名
- 必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
- 所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
- 将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
activity_main.xml
2.4.2 Dialog命名:dialog_描述.xml
dialog_username.xml
2.4.3 PopupWindow命名:ppw_描述.xml
ppw_parkinglot.xml
2.4.4 列表项命名:item_描述.xml
item_notification.xml
2.4.5 包含项命名:模块_(位置)描述.xml
activity_main_head.xml
activity_main_bottom.xml
2.5 方法名
- 如变量名相同,但应避免太长
- 方法名通常是动词或动词短语。
如
init();
getXX();
setXX();
closeXX();
addXX();
deleteXX();
removeXX();
正确格式
private void updateShaderMatrix()
错误格式
private void setSensorListActivityAllDataInterface()
2.6常量名
- 常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词
- 每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。
如:
public static final String CONTENT = "content";
public static final String FILES = "FILES";
public static final String LIKE = "like";
public static final String REPORT_TYPE = "obj_type";
public static final String REPORT_ID = "obj_id";
public static final String REPORT_REASON = "reason";
public static final String REPLY = "reply";
3.注释
3.1 块注释风格
- 块注释与其周围的代码在同一缩进级别。它们可以是/ ... /风格,也可以是// ...风格。对于多行的/ ... /注释,后续行必须从开始, 并且与前一行的对齐。
3.2类文件注释
- 类文件注释应包含当前类的功能信息描述,创建人,创建时间
/**
* 共建详情页面
* Created by ld on 2017/9/14 0014.
*/
public class TopicDetailedAty extends BaseActivity implements ITopicDetailedView,TopicOpinionAdapter.OnItemClickListener {
3.3方法注释
- 方法注释应包含当前方法的功能信息描述,参数说明,返回值说明
/**
* Created by ld on 2017/9/15
* 获取话题内容
* @param token 论坛token
* @param topic 话题ID
* @param num 评论条数
* @param listener 回调接口
*/
@Override
public void getTopicInfo(String token, int topic, int num,final GetTopicInfoListener listener) {
3.4语句注释
- 某些晦涩难懂的语句,应当加上注释,说明该语句作用
// 播放音频,第二个参数为左声道音量;第三个参数为右声道音量;第四个参数为优先级;第五个参数为循环次数,0不循环,-1循环;第六个参数为速率,速率最低0.5最高为2,1代表正常速度
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
soundPool.play(sourceid, 2, 2, 0, 0, 1);
}
});
4. 特殊字符
4.1空白字符
- 除了行结束符序列,ASCII水平空格字符(0x20,即空格)是源文件中唯一允许出现的空白字符,这意味着:
4.1.1. 所有其它字符串中的空白字符都要进行转义。
4.1.2. 制表符不用于缩进(可以在IDE中Tab键设置为若干个空格)。
4.2特殊转义序列
- 对于具有特殊转义序列的任何字符(\b, \t, \n, \f, \r, ", '及),我们使用它的转义序列,而不是相应的八进制(比如\012)或Unicode(比如\u000a)转义。
4.3ASCII字符
- 对于剩余的非ASCII字符,是使用实际的Unicode字符(比如∞),还是使用等价的Unicode转义符(比如\u221e),取决于哪个能让代码更易于阅读和理解。
例如:
String unitAbbrev = "μs"; | 即使没有注释也非常清晰
String unitAbbrev = "\u03bcs"; // "μs" | 允许,但没有理由要这样做
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" | 允许,但这样做显得笨拙还容易出错
String unitAbbrev = "\u03bcs"; | 很糟,读者根本看不出这是什么
return '\ufeff' + content; // byte order mark | Good,对于非打印字符,使用转义,并在必要时写上注释
5.VALUES的使用
5.1文本字符串
- 程序中出现的描述语句,提示语句,视图控件中的默认值等应放置在values/string资源文件中,通过getString调用以便后期修改以及国际化
5.2尺寸值、色值
- 尺寸值包含字体尺寸、布局尺寸等,应放置在values/dimen;色值应放置在values/color资源文件下,方便管理修改
6.格式术语
- 说明:块状结构(block-like construct)指的是一个类,方法或构造函数的主体。需要注意的是,数组初始化中的初始值可被选择性地视为块状结构(4.8.3.1节)。
6.1大括号
- 大括号与if, else, for, do, while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上
- 对于非空块和块状结构,大括号遵循 Kernighan 和 Ritchie 风格 (Egyptian brackets)
- 左大括号前不换行
- 左大括号后换行
- 右大括号前换行
- 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。
return new MyClass() {
@Override public void method() {
if (condition()) {
try {
something();
} catch (ProblemException e) {
recover();
}
}
}
};
6.2空结构使用简洁
- 一个空的块状结构里为空,简写成{}
void getInfo() {}
6.3换行
- 每个语句后要换行
- 列限制:60
一个项目可以选择一行80个字符或100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。
7.数据结构
7.1 switch语句
- 每个语句组包含一个或多个switch标签(case FOO:或default:),后面跟着一条或多条语句
- 与其它块状结构一致,switch块中的内容缩进为2个空格。每个switch标签后新起一行,再缩进2个空格,写下一条或多条语句。
- 每个switch语句都包含一个default语句组,即使它什么代码也不包含。
网友评论