Android编码规范
动机
我们毕竟是多人合作开发的,每个人的习惯不一样,这会导致代码很不统一,看别人的代码很不舒服,影响开发和维护;
原则
1. 务实和精简。网上规范很多,但是过于冗长的规范最终会变成摆设,所以我们尽量保持务实和精简;
2. 代码review。定期的代码review能确保规范的严格执行;
3. 规范是活的。我们会根据实际需要增减条目;
技巧
写代码的时候请想着2件事情:
4. 假设你要在公司呆很多年,你写的代码你要负责一直维护下去的;(这能避免你写出不负责任的代码)
5. 假设你是在帮一个你暗恋已久的妹子写代码,希望她看到你的代码能会心一笑;(这会帮你写出可读的代码)
包名
全部用小写;
不要出现下划线,例如wei_xin;
不要出现v2/v3这样的版本号;
用单数词而不必用复数词,例如widget(Yes), widgets(No);
常用包名:
activity //内部按业务再分类
fragment
dialog
adapter
util
widget // 自定义View
service
entity
interfaze // 因为interface是关键字,不能用
constant
receiver
http
provider //ContentProvider
storage
· --db
· --sp // SharedPreference
web
布局
加类型前缀,例如:
activity_
fragment_
dialog_
item_
footer_
header_
不要用layout_这种没营养的前缀;
View的id加类型前缀,全部小写,用_分割,例如btn_login;
常用类型前缀:
tv_
iv_
btn_
lv_ // ListView
spn_ // Spinner
ckb_ // CheckBox
v_ // View
ll_ // LinearLayout
rl_ // RelativeLayout
fl // FrameLayout
字体
字体用font_sp数字,例如:
font_16
font_17
距离用space_dp数字,例如:
space_12
space_14
圆角用radius_dp数字,例如:
radius_12
radius_14
不要出现业务字眼,例如title_bar_margin_top,因为一出现业务字眼就不通用了;
颜色
不要出现业务字眼,例如btn_bg_normal,因为这就不通用了;
尽量给每个颜色取个名字,例如:
red
green
那些不好取名字,但是大概知道属于什么颜色的就用red_1, red_2, green_1, green_2;
那些实在不知道怎么取名字的,用color_1, color_2;
图片
全部小写,用_分割,形如a_b_c;
建议加类型前缀,例如ic_,bg_,ani_有助于缩小查找范围;
避免毫无营养的前缀,例如img_,pic_;
尽量描述图片内容,例如用ic_dog, ic_cat;
少牵扯使用场景,例如:ic_login;
常用前缀有:
ic_ // icon
bg_ // background
ani_ // animation
不同状态下的图用后缀区分:
_normal
_pressed
_disabled
请严格使用这几个约定的单词,不要出现_press, disable等变形;
其他Drawable资源
selector_.xml
shape_.xml
类名
名词,大写开头,驼峰,例如LoginActivity;
特殊的类加类型后缀,常见后缀有:
Activity;
Fragment;
Adapter;
Service;
Receiver;
Provider;
成员名
名词,以m开头,驼峰,例如mName;
Java里的View成员名和layout里的id对应,例如:
TextView mTvName = (TextView)findViewById(R.id.tv_name);
非成员变量名
和成员名类似,去掉m前缀就行了;
方法名
动词或者动词短语,小写开头,驼峰,例如initTitleBar();
注释
// 这是单行注释
/**
* 这是多行注释
* 一行
* 一行
**/
尽量加注释;
格式化
用AndroidStudio默认配置,不要自定义,这样大家能保持统一;
行宽
100列,超过要换行,照顾笔记本等小屏幕;
注意换行位置;
YES:
String str = “hello”
+ “world”;// 链接符号放在下一行;
NO:
String str = “hello”+
“world”;
注意亲密度:
YES:
tvName.setText(
“hello”+ “world”); // 让逻辑上亲密的元素挨在一起
NO:
tvName.setText(“hello”
+ “world”);
括号
// 就算只有一行也要加括号,避免以后再加一行的时候忘记加括号;
if(flag) {
tvName.setText(“a”);
} else {
tvName.setText(“b”);
}
常量
重复出现的字符串或数字都应该定义成常量,全部大写,下划线分割,例如:
putExtra(“user_name”, ..)
getStringExtra(“user_name”, …)
应该改成:
Static final String USER_NAME = “user_name”;
putExtra(USER_NAME, ..)
getStringExtra(USER_NAME, …)
Activity之间的参数传递
由被调用者提供一个方法,这样参数不容易传错;
ActivityA{
void onClick(){
ActivityB.start(this, "name");
}
}
ActvivityB{
private static final String NAME = "name";
public static void start(Context context, String name){
Intent i = new Intent(context, ActivityB.class);
i.putExtra(NAME, name);
context.startActivity(i);
}
onCreate(){
String name = getIntent().getStringExtra(NAME);
}
}
TODO
没做完,没想明白的地方一定要用TODO备注;
// TODO: aaa
Git
1)每次提交只涉及一个模块或者功能点,不要把多个无关联的修改一股脑的提交,方便查看diff和revert;
2)提交前一定要测试,确保能正常编译和运行,不要影响其他人的工作;
3)注释格式:类别 + 位置 + 描述:
feature: 优惠券页面,字体修改;
refine: 首页,启动速度优化;
bug: 登录页面,点击按钮没反应;
类别仅限于上面这3类,请严格用这几个小写单词,不要出现Bug, fix bug, bug fix, add feature等变形,这样以后看git log会很舒服;
格式化
如果遇到以前没格式化的代码,建议在修改前先格式化一次并提交一次,注释写清楚“单纯格式化,没有修改”,然后再继续你的工作,避免其他人看到很多diff,都不知道你到底改了哪里;
2867

被折叠的 条评论
为什么被折叠?



