Android 开发规范
命名
类名
使用驼峰命名法,例如 DataHolder
,相同的组件内的类带有同样的后缀。
组件 | 后缀 | 示例 |
---|---|---|
Activity | Activity | MainActivity |
Fragment | Fragment | MainFragment |
Service | Service | PushMessageService |
Adapter | Adapter | RecentMessageAdapter |
字段
-
非 public 且 非 static 字段名称以
m
开头; 例如:mAdapter
-
static 字段名称以
s
开头;
例如:sSington
-
常量使用全大写且用下划线进行分割‘ 例如:
REQ_PERMISSION
-
数组命名以
array
为后缀 例如:titleArray
-
List 命名以
list
为后缀
例如:nameList
- Map 命名以
map
为后缀
例如:infoMap
对于 JavaBean 中字段,可忽略。
参数命名
SharePreferences、Bundle、Intent 等传递的参数
Elements | 前缀 | 示例 |
---|---|---|
SharePreference | PREF_ | PREF_TOKEN = "PFEF_TOKEN" |
Bundle | BUNDLE_ | BUNDLE_USER_ID = "BUNDLE_USER_ID" |
Intent Extra | EXTRA_ | EXTRA_USERNAME = "EXTRA_USERNAME" |
Intent Action | ACTION_ | ACTION_OPEN_HOME = "com.myapp.action.ACTION_OPEN_HOME" |
资源文件
- Layout 命名
组件 | 前缀 | 示例 |
---|---|---|
Fragment | fragment_ | fragment_setting |
Activity | activity_ | activity_main |
Dialog | dialog_ | dialog_sign_up |
Adapter View Item | item_ | item_timeline |
- drawable 命名
状态 | 后缀 | 示例 |
---|---|---|
normal | _normal | btn_login_normal |
pressed | _pressed | btn_login_pressed |
disabled | _disabled | btn_login_disabled |
selected | _selected | btn_login_selected |
- id 及对应字段命名 命名规则:控件缩写 + 位置 + 职责
控件 | 前缀 | 示例 |
---|---|---|
TextView | tv_ | tv_login_app_name |
ImageView | iv_ | iv_sign_avatar |
Button | bt_ | bt_Login_login |
CheckBox | cb_ | cb_sign_gender |
RadioButton | rbt_ | rbt_sign_gender_male |
RecyclerView | rv_ | rv_recent_message |
RelativeLayout | rl_ | rl_sign_container |
如果布局为根布局,id 为前缀 + 位置 + root,例如:
rl_sign_root
-
String 命名
-
与 id 命名相似,去掉前缀缩写即可。例如:
sign_title
- 对于一些通用的 String 建议使用通用名称,规则:all_ + 职责,例如:
all_dialog_positive
-
对于每个页面的 title 的命名,规则是:title_ + 页面,例如:
title_sign_up
-
color 和 dimen 的命名
-
尽量定义成通用名称,例如:
title_txt_color
,sub_title_size
- 若某些场景下单独使用,使用前缀区分,例如:
login_title_size
代码风格
- 单行代码
如果条件语句只有一行推荐写法:
if (NetWorkUtils.isConnect()) {
doSomeThing();
}
- 方法块
- 单个方法行数不建议超过 40 行;
- 两个方法中间保持一行空行;
注释
推荐优先使用方法注释或字段注释,例如:
/**
* 此处写方法注释
* @param stringList 参数注释
* @return 返回值注释
*/
public static List<RequestBody> totoRequestBodyList(List<String> stringList) {
......
}
/**
* 此处写字段注释
*/
private EditText etMessage;
若方法或字段被废弃不推荐使用,应在方法或字段上增加 @Deprecated
注解,并在注释中声明应该使用的方法或字段。
其它
xml 中优先使用使用自带的关闭标签:
推荐:
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送给:张三"/>
不推荐:
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送给:张三">
</TextView>
Git Commit 规范
- 建议每次 commit 文件数量不超过 5 个;
- git commit 规范参考:Git 提交规范。
Commit 内容规范
<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>
header
-
type
-
用于说明
commit
的类别,只允许使用下面7个标识。feat:新功能(feature) fix:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 chore:构建过程或辅助工具的变动
-
scope
-
用于说明
commit
影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。 -
subject
-
是
commit
目的的简短描述,不超过50个字符。1.以动词开头,使用第一人称现在时,比如change,而不是changed或changes 2.第一个字母小写 3.结尾不加句号(.)
Body
Body 部分是对本次 commit 的详细描述,可以分成多行。下面是一个范例。
- 修复密码输入框的字符长度限制问题;
- 修复密码合法性验证规则;