在团队开发项目中,统一的命名规范与编码风格非常重要,只有这样才像一个优秀团队开发的产品。而且这样方便阅读其他人的代码,便于后期维护。我觉得 Android 源码的可读性很好,风格统一,而在实际项目中经常看到混乱的风格,缩进有的是tab有的是space,命名有的是中文拼音有的是英文,看上去非常的乱。相信大家都喜欢简洁整齐的代码,这就需要团队成员稍微牺牲下个性,遵守统一的规范,自己读起来也赏心悦目。下面我根据自己的一些编码规范和网上的一些资料整理出一套 Android 命名规范,至于编码风格是根据 Google 的提供的 Android code style 略微修改而成,直接在 Android Studio 导入即可, 所以下面主要是介绍命名规范内容。
Android 命名规范
下面的命名规范,有些是我个人习惯,有不喜欢的地方可以复制后修改即可,做到简单易记就好,便于团队成员遵守。
基本命名方式
大驼峰命名法(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() |
资源文件
资源文件的命名基本规则是: 类型 + 描述, 采用下划线命名法
- layout 目录下文件命名
布局文件的命名需要与相应的组件对应,这样方便查找和维护,例如创建一个主页的 Activity 布局文件,命名为 activity_home.xml
下面是一些常见布局命名:
| 布局类型 | 命名方式 |
|---|---|
| Activity 的布局 | activity_XX |
| Fragment 的布局 | fragment_XX |
| Dialog 的布局 | dialog_XX |
| 可include 的布局 | include_XX |
| RecyclerView 的布局 | recycler_item_XX |
- 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 后缀
- stings 和 colors 资源文件
也是一样使用下划线命名法,可以按模块来划分为多个strings文件,编译打包时会自动把同类文件进行合并
例如有 moudleA,moudleB, moudleCommon, 则分为 strings_moudle_a , strings_moudle_b , strings_common 。
colors 资源文件的命名也类似,在文件内部具体某个 color 值的命名可以按使用界面作为前缀,例如 主页中分隔线的颜色 命名为 home_fragment_divider
控件ID
控件 ID 采用下划线命名法,全部都是小写。控件的 ID 的命名我觉得最好与之前控件命名相对应,例如之前登陆的按钮命名为 mBtnLogin,那么对应的 ID 命名为 btn_login
在代码中就是Button mBtnLogin = (Button) findViewById(R.id.btn_login);,非常清晰明了
Android 编码风格
编码风格的话,当然是以 Google 官方推荐的为标准,想要了解详细规则的请看 Android Code Style。
在实际项目中,团队成员只需要用统一的 code style 即可,Google Android 团队使用的文件是 AndroidStyle.xml ,也可以直接使用我的 code style ,在官方的风格上稍微修改了下,地址为 https://github.com/JohnnyShieh/CodeStyles/blob/master/Android/intellij/codestyles/AndroidStyle.xml
导入 Code Style
Mac 环境下, Android Studio -> Preferences -> Editor -> Code Style -> 点击 Manage.. -> 在弹框中点击 Import 选择下载的 AndroidStyle.xml 文件即可, 其他环境下也类似。
一开始大家的格式肯定会有不统一的时候,特别是之前的代码,可以按重新格式代码的快捷键调整格式,在 Preferences -> Keymap -> 右侧搜索框输入 reformat -> 下面 Reformat Code 对应的快捷键就是了。一般 Mac 下默认的快捷键为 Alt + Command + L 。
参考文章: