欢迎转载,但请务必在明确位置注明文章出处! 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 。