赞
踩
公司项目开始时间较早,之前开发时候没有具体的代码规范,历经多次人员更替之后,现在的项目代码显得有一些紊乱,所以我打算制定代码规范标准,所有人按照规范编码,提高代码质量,提升代码的可读性,便于后期的代码维护。
开发工具:Android Studio
编码格式:UTF-8
要求:分类明确,取名直观,防止重复
命名组成:小写字母+数字+下划线
类型 | 命名规范 | 举例 | 备注 |
---|---|---|---|
drawable | 类型_属性_ | btn_back_click / shape_r15_33333 / shape_r15_b1_33333 | |
mipmap | 类型_功能_属性 | ic_message_white / bg_dialog_header | |
anim | 类型_功能_属性 | anim_activity_in / anim_dialog_out | |
string | 模块名_page名_功能 | mine_userinfo_usename | |
color | color_具体色值 / color_具体色值_al透明度 | color_333333 / color_333333_a50 | 基本只有这两种 |
style | style_功能_属性描述 | style_text_12_33333 | |
layout | 分类_page_功能 | activity_main / fragment_mine / item_setting_userinfo / layout_titlebar | 必须以明确分类为开头 |
viewId | view缩写_功能 | tv_title / btn_click |
viewId开头规范
View类型 | 开头 | 举例 |
---|---|---|
FrameLayout | fl | fl_main_user |
LinearLayout | ll | ll_main_user |
RelativeLayout | rl | rl_setting_phone |
TextView | tv | tv_title |
EditTextView | etv | etv_phone |
Button | btn | btn_back |
ImageView | iv | iv_menu |
RecyclerView | rv | rv_main |
CheckBox | cb | cb_gender |
ScrollView | sv | sv_main |
SmartRefreshLayout | srl | srl_mine |
… |
命名规则:一个唯一包名的前缀总是全部小写的 ASCII字母并且是一个顶级域名,通常是com。
例如com.cmcc.xxx
规约:包命名必须以com. cmcc开始,后面跟项目名称cmcc.XXX(或者缩写),再后面为模块名或层级名称。
如:com.cmcc.项目缩写.模块名→com.cmcc.base
如:com.cmcc.项目缩写.模块名→com.cmcc.view
遵循小驼峰规则,且取名必须与方法功能相符
类型 | 命名规范 | 举例 | 备注 |
---|---|---|---|
void | 按功能,有实际意义 | initViews / getUserInfo / setValuesToViews |
要求:大驼峰,有实际意义
包括:class、interface、enum
类型 | 命名规范 | 举例 | 备注 |
---|---|---|---|
基类 | 按功能,有实际意义 | BaseActiivty / BaseFragment / BaseHoder / BaseData / BaseItem | |
组件、页面类 | 功能+页面类型 | MyApplication / MainActivity / DiscoveroyFragment / DeviceHolder / HomePageAdapter | |
功能类 | 按功能,有实际意义 | RecyclerItemClickListener / TextViewUtils / ActivityManager / PageValueTypeEnum | |
自定义View | 按照控件实际功能命名 | MyViewPager / CountDownTextView / CameraView / TitleBarView |
类型 | 举例 | 备注 |
---|---|---|
临时变量 | i,j,k,l,m,n,o | 应用在for循环中居多 |
其他变量 | mContent / pageType / loginDeviceName | 遵循小驼峰规则 |
大写并用下划线分隔
举例 |
---|
PACKAGE_NANE |
SP_KEY_USER_NAME |
SP_KEY_USER_GENDER |
PAGE_TYPE_HOME |
PAGE_TYPE_MINE |
PAGE_TYPE_TITLE |
1.XML布局中尽量减少层级。
2.布局控件数量大于10个时,使用ConstraintLayout,否则使用其他Layout,考虑使用优先级:FrameLayout>LinearLayout>RelativeLayout>其他。
RecyclerViewHolder的布局文件中,不要使用ConstraintLayout。
3.布局文件中,TextView的text属性,禁止直接写死字符串,必须添加@string引用
// 4.使用AppCompatXXXView代替XXXView(暂不做要求)
5.同属性超过4个时,需要使用style
6.及时删除多余import及代码格式化,每次编码完成后习惯性Ctrl+Alt+O,Ctrl+Alt+L
7.每个方法总行数不能超过80行
8.单行代码长度不能超过一屏幕(160字符),若过长需及时换行
9.if语句必须添加大括号,即使逻辑只有一行代码,也需要,例如:
if(needRefresh){
refresh();
}
10.非空判断,使用NullUtils.isNotNull(XX);
11.禁止使用strinng.equals(string),字符串比较使用TextUtils.equals(string1,string2);
12.禁止直接使用TextView.setText();,TextView设置字符串使用TextViewUtils.setText(tv, str);
13.禁止在自定义View的onDraw方法里创建新对象
14.禁止在RecyclerViewHolder的onBindView中创建新对象
15.禁止在size超过10的for循环中创建新对象
16.弃用或不推荐方法,及时添加@Deprecated注解,如有新方法代替,请在注解中添加{@link XXX}
17.数据类型,不要直接使用int,须定义枚举
18.遇到需要使用HashMap的地方,使用ArrayMap代替
19.代码中遇到字符串拼接,禁止直接写死字符串,必须使用Resource.getString(R.string.str);
20.布局文件中,所有的宽高、字体大小必须引用@deimen
android:layout_width="@dimen/x100'
android:textSize="@dimen/x16"
21.单行TextView,必须设置minHeight
22.多行TextView,必须设置行间距,引用@style/base_module_text_line_spacing_multiplier
23.提交代码中不能包含原生的Log打印,日志打印使用已封装的MyLog
一眼就能看出实际意义的方法不需要添加注释,例如:在findViewById(int viewId)
提测代码原则上不包含TODO注释(延期需求除外)
必须添加创建人署名和联系方式
/**
* @author 创建人: XXX
* @mobile 联系电话:199999999XX
* @email 邮箱:199999999XX@163.com
* @createTime 创建时间: 2022/6/28
* @describe 描述:APP主界面
*/
public class MainActivity {
}
可在studio中添加设置
必须包含方法用途
必须申明每一个参数变量的意义
/**
* 获取在线设备名称
*
* @param deviceList 设备列表
* @param position 下标
* @return 设备名称
*/
private String getOnlineDeviceName(ArrayList<DeviceInfo> deviceList, int position){
... // 其他逻辑
return deviceList.get(position).name;
}
方法定义完成后,可通过AS的代码提示直接生成,生成后完善即可。
必须使用文档注释
/** 是否启动自动进入 */
public static final String IS_CHANGE_FROM_START = "is_change_from_start";
或
/**
* 是否启动自动进入
*/
public static final String IS_CHANGE_FROM_START = "is_change_from_start";
使用单行注释或多行注释
private void run(){
// 单行注释
xxx();
}
private void run(){
/*
* 多行注释
* /
xxx();
}
1.未经测试的代码,禁止提交,确保提交的代码不影响其他人正常开发流程
2.代码提交之前,必须先fetch并rebase,合并至最新代码后再push
3.提交 commit 规范为:
[需求] 需求名称以及内容
[集成] 变动SDK名称
[优化] 优化功能点
[修复] 修复bug内容
1.代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
2.代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
3.杜绝不规范的英文缩写:AbstractClass 缩写成AbsClass;condition缩写成condi;此类随意缩写严重降低了代码的可阅读性。
4.关于Service或Dao层的命名
插入:insert(推荐)或save
删除:delete
修改:update(推荐)或modify
查询单个对象:get
查询多个对象:list
5.避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
参考
https://blog.csdn.net/Android_XG/article/details/121784873
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。