Android编程规范 | cfanr
前言
在软件开发中,没有规矩不成方圆,但规则是人制定的,没有标准,只有适合自己或团队的才是最好的,当然前提是整体上要符合编程语言的规范。
一、命名规范
1.包命名
规则:包名全部小写,采用反域名命名规则,一级包名是顶级域名,通常为com, edu, gov, net, org等,二级包名,通常为公司名或部门名或者个人名,三级包名通常为项目名,四级包名为模块名或者层级名。以下是从层级包名来划分Android项目中采用的包划分结构:(在实际项目中可以采用包命名和模块命名结合的方式)
1 2 3 4 5 6 7 8 9 10 11 12 13 | - com.domain.xxx.ui (用户界面相关) - com.domain.xxx.ui.activity //所有的Activity类 - com.domain.xxx.ui.fragment //所有的Fragment类 - com.domain.xxx.ui.dialog //所有对话框 - com.domain.xxx.ui.adapter //所有的Adapter类(适配器类) - com.domain.xxx.view //自定义的View类 - com.domain.xxx.service //后台Service类 - com.domain.xxx.util //常用的公共工具类(Json解析、数值处理、屏幕、日期处理、图片处理、日志等) - com.domain.xxx.bean(or model) //实体模型类 - com.domain.xxx.db //数据库操作相关的类 - com.domain.xxx.config //所有的配置相关的类 - com.domain.xxx.api //网络api接口相关de 类 - com.domain.xxx.broadcast //广播相关 |
另外,大层级下,可以按照模块分小层级,利于代码的阅读和查找,如自定义View层级下,可以新建一个下拉刷新控件相关的层级ptr,即com.domain.xxx.view.ptr
2.类命名
规则:采用大驼峰式命名法,首字母大写,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。以下列举的是Android中几种最为常用的类的命名:
1 2 3 4 5 6 7 | class LoginActivity; //activity类 class DiscoverFragment; //fragment类 class AnalysisService; //service类 class WakeupRankAdapter; //adapter类 class StringUtils; //工具类 class UserEntity; or UserModel UserBean //模型类; Enitity后缀,如果原先命名太长可以不加,短的话,可以加,避免命名太过冗长 class ApiImpl; //接口实现类 |
3.接口命名
规则:命名规则与类命名一样采用大驼峰式命名法,首字母大写,多以able, ible, er结尾
1 2 3 | interface Comparable; interface Accessible; interface OnClickListener; |
4.方法
规则:采用小驼峰命名法,首字母小写,方法名采用动词或动名词结构。方法的命名应该与方法的真正行为具有对应关系,下面给出一些方法名的动词前缀标示的建议。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 方法名 描述 getXX() 获取某个属性的返回值 (getter、setter可以使用[GsonFormat插件](http://www.jianshu.com/p/40608ce179cb)自动生成) setXX() 设置某个属性值 initXX() 初始化方法,如初始化布局initViews(),初始化控件点击事件 initEvent() loadxxxData() 获取网络某个模块(页面)数据 isXX() 判断是否true的方法; checkXX() 与isXX意义等价 processXX() 处理数据 updateXX() 更新数据 saveXX() 保存数据 addXX() 添加数据 deleteXX() 删除数据 resetXX() 重置数据 clearXX() 清除数据 removeXX() 移除数据或者视图等,如removeView(); drawXX() 绘制数据或者视图 |
5.变量
规则:采用小驼峰命名法,首字母小写。变量名应简短且能描述其用途,尽量避免拼音,无意义地缩写。除非是临时变量,否则不建议使用单个字符的变量名,如i, j, k。对于变量命名,还有一种风格是google的以字母m为前缀(m为member缩写),在android 源码中随处可见
1 2 | private int userName; //java的一般性风格 private int mUserName; //google的成员变量风格,m为member的缩写 |
还有,约定俗成的命名或缩写:
如对象的List或ArrayList,对象名(或含义名)后直接加List;对应对象的数组,在对象名(或含义名)后加s
1 2 3 4 5 6 7 8 9 | List<User> userList; ArrayList<MulCard> mulCardList; List<String> titleList; String[] titles; Model[] models; 缩写: String ----str,如jsonStr image----img, message---msg |
6.常量
规则:常量使用全大写字母加下划线的方式命名。
1 2 | public static final int TAG= "tag"; public static final int START_CLASS_NOT_FOUND = -2; |
下面介绍的与Android关系更加紧密:
7.控件变量名
规则:首先需要满足第5条变量的规则, 模式:view缩写+逻辑名
1 2 | Button btnSend, btnLogin TextView tvName; |
常用控件缩写:
1 2 3 4 5 6 7 8 | TextView tv Button btn EditText et ImageView iv ImageButton ibtn LinearLayout ll RelativeLayout rl FrameLayout fl |
其他控件如果,当前页面使用次数只有2个以内,可以不按照上面view缩写+逻辑名的规则,直接用在原来类型名前面加个m的固定命名或功能模块+后缀如:(这样更直观简单点)
1 2 3 4 5 6 | - ListView,包括封装的ListView,直接固定命名为:mListView ,多个的话:msgListView, articleListView - GridView,命名为:mGridView - RecyclerView,命名为:mRecyclerView - ScrollView,命名为:mScrollView - TabLayout,命名为:mTabLayout - ViewPager,命名为:mViewPager |
同样,对应的适配器,一般一个页面只有适配器,命名为 mAdapter,多个可以根据功能模块+Adapter, 如:msgAdapter, articleAdapter
8.控件ID
规则:view缩写模块名逻辑名,全部小写,id名尽量保证唯一,便于在查找时,能够一次性找到
android:id=”@+id/btn_news_send” //样例
view缩写如下: