欢迎转载,但请务必在明确位置注明文章出处! http://johnnyshieh.github.io/android/2016/12/22/android-coding-standards/
在团队开发项目中,统一的命名规范与编码风格非常重要,只有这样才像一个优秀团队开发的产品。而且这样方便阅读其他人的代码,便于后期维护。我觉得 Android 源码的可读性很好,风格统一,而在实际项目中经常看到混乱的风格,缩进有的是 tab
有的是 space
,命名有的是中文拼音有的是英文,看上去非常的乱。相信大家都喜欢简洁整齐的代码,这就需要团队成员稍微牺牲下个性,遵守统一的规范,自己读起来也赏心悦目。下面我根据自己的一些编码规范和网上的一些资料整理出一套 Android 命名规范,至于编码风格是根据 Google 的提供的 Android code style 略微修改而成,直接在 Android Studio 导入即可, 所以下面主要是介绍命名规范内容。
下面的命名规范,有些是我个人习惯,有不喜欢的地方可以复制后修改即可,做到简单易记就好,便于团队成员遵守。
大驼峰命名法(UpperCamelCase):所有单词的第一个字母大写
小驼峰命名法(lowerCamelCase):除首单词外,其余所有单词的第一个字母大写
下划线命名法(case1_case2):单词与单词之间用下划线间隔,所有单词小写
一般建议用来命名的单词简单明了,不要用中文拼音,找个词典翻译下还能提高自己英文水平。有些单词可以写成一些约定俗成的缩写,也可以根据团队成员间的约定进行缩写命名。
下表是一些常用的缩写:
常用词 | 缩写 |
---|---|
Argument | arg |
Buffer | buf |
Clear | clr |
Clock | clk |
Compare | cmp |
Configuration | cfg |
Context | ctx |
Delay | dly |
Device | dev |
Display | disp |
Error | err |
function | fnct |
Hexadecimal | hex |
Initialize | init |
Maximum | max |
Message | msg |
Minimum | min |
multiplex | mux |
Parameter | param |
Previous | prev |
Priority | prio |
Register | reg |
Schedule | sched |
Synchronize | sync |
类名由一个或多个名词组成,采用大驼峰命名法,把类型作为最后一个单词,其他单词尽量避免缩写,除非是众所周知的,例如 HTML,URL,JSON,XML 等
类 | 命名格式 | 示例 |
---|---|---|
Activity | XXX描述 + Activity | HomeActivity |
Fragment | XXX描述 + Fragment | ContactsFragment |
Service | XXX描述 + Service | PushService |
BroadcastReceiver | XXX描述 + Receiver | NetworkReceiver |
ContentProvider | XXX描述 + Provider | BookmarkProvider |
Adapter | XXX描述 + Adapter | NewsListAdapter |
Bean | XXX描述 + Bean | PersonBean |
基础功能类 | Base + XX父类名 | BaseActivity |
工具类 | XXX描述 + Utils | BitmapUtils |
命名方式和类一致,建议再加上 I
前缀,表明这是一个接口,与类有所区分,例如:ILoadListener
采用小驼峰命名法,同时我觉得为了更好的区分局部变量、成员变量、静态变量,推荐加个前缀,Android 源码中也是这样使用的。
成员变量命名前加 m
(member),例如 mWidth,mHeight
静态变量命名前加 s
(static),例如静态的单例变量 sInstance
例外,Android 开发中经常有控件变量,如 TextView,ImageView 等,推荐命名方式: m + 控件类型缩写 + 描述, 如登陆按钮命名为 mBtnLogin 。这样可以很清楚知道这是一个 Button 控件类型的局部变量,代码也会整齐简洁。
下面列出一些常用控件的缩写
控件 | 缩写 |
---|---|
ActionBar | ab |
LinearLayout | ll |
RelativeLayout | rl |
FrameLayout | fl |
TextView | tv |
ImageView | iv |
Button | btn |
ImageButton | imgBtn |
RadioButton | rdoBtn |
ToggleButton | tglBtn |
CheckBox | chk |
DatePicker | dtPk |
TimePicker | tmPk |
EditText | edtTxt |
ProgressBar | proBar |
SeekBar | skBar |
AutoCompleteTextView | autoTxt |
VideoView | videoVi |
WebView | webVi |
Spinner | spn |
ScrollView | sclVi |
ListView | lv |
GridView | gv |
RecyclerView | rv |
全部大写,同时采用下划线命名法,例如 MAX_THREAD_NUM
采用小驼峰命名法,一般用动词或动名词
命名格式 | 说明 |
---|---|
initXX() | 初始化相关方法,如初始化布局 initLayout() |
isXX() | 是否满足某些条件,如是否连接WIFI:isWIFIConnected() |
processXX() | 处理一些数据或过程 |
showXX() | 显示XX信息 |
hideXX() | 隐藏XX信息 |
saveXX() | 保存XX |
resetXX() | 重置XX |
addXX() / insertXX() | 添加XX |
deleteXX() / removeXX() | 删除XX |
updateXX() | 更新XX |
searchXX() / findXX() / queryXX() | 查找XX |
drawXX() | 绘制XX |
onXX() | 一些状态回调,如加载成功 onLoadSuccess() |
资源文件的命名基本规则是: 类型 + 描述, 采用下划线命名法
1.layout 目录下文件命名
布局文件的命名需要与相应的组件对应,这样方便查找和维护,例如创建一个主页的 Activity 布局文件,命名为 activity_home.xml
下面是一些常见布局命名:
布局类型 | 命名方式 |
---|---|
Activity 的布局 | activity_XX |
Fragment 的布局 | fragment_XX |
Dialog 的布局 | dialog_XX |
可include 的布局 | include_XX |
RecyclerView 的布局 | recycler_item_XX |
2.drawable 命名
Drawable的命名以使用的控件作为前缀,后面再加上描述,中间以下划线分隔。
ActionBar 使用 ab_
Divider 使用 divider_
Icon 使用 ic_
Menu 使用 menu_
Button 使用 btn_login
Drawable 是有多个状态的,也应该在命名中体现出来:
Normal 对应 _normal 后缀, 例如 btn_click_normal.png
Pressed 对应 _pressed 后缀
Focused 对应 _focused 后缀
Disabled 对应 _disabled 后缀
Selected 对应 _selected 后缀
3.stings 和 colors 资源文件
也是一样使用下划线命名法,可以按模块来划分为多个strings文件,编译打包时会自动把同类文件进行合并
例如有 moudleA,moudleB, moudleCommon, 则分为 strings_moudle_a , strings_moudle_b , strings_common 。
colors 资源文件的命名也类似,在文件内部具体某个 color 值的命名可以按使用界面作为前缀,例如 主页中分隔线的颜色 命名为 home_fragment_divider
控件ID采用下划线命名法,全部都是小写。控件的ID的命名我觉得最好与之前控件命名相对应,例如之前登陆的按钮命名为 mBtnLogin,那么对应的ID命名为 btn_login
在代码中就是 Button mBtnLogin = (Button) findViewById(R.id.btn_login);
,非常清晰明了
编码风格的话,当然是以 Google 官方推荐的为标准,想要了解详细规则的请看 Android Code Style 。
在实际项目中,团队成员只需要用统一的 code style 即可,Google Android 团队使用的文件是 AndroidStyle.xml ,也可以直接使用我的 code style ,在官方的风格上稍微修改了下,地址为 https://github.com/JohnnyShieh/CodeStyles/blob/master/Android/intellij/codestyles/AndroidStyle.xml
Mac环境下, Android Studio -> Preferences -> Editor -> Code Style -> 点击 Manage.. -> 在弹框中点击 Import 选择下载的 AndroidStyle.xml 文件即可, 其他环境下也类似。
一开始大家的格式肯定会有不统一的时候,特别是之前的代码,可以按重新格式代码的快捷键调整格式,在 Preferences -> Keymap -> 右侧搜索框输入 reformat -> 下面 Reformat Code 对应的快捷键就是了。一般 Mac 下默认的快捷键为 Alt + Command + L 。