Android编程规范 | cfanr

JerryXia 发表于 , 阅读 (38)

前言

在软件开发中,没有规矩不成方圆,但规则是人制定的,没有标准,只有适合自己或团队的才是最好的,当然前提是整体上要符合编程语言的规范。

一、命名规范

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缩写如下: