包目录说明
-constant-常量 -db-数据库相关,数据库采用xutils -event-数据响应/事件结构体 -model-模型 --buiness-业务类 --entity-实体 --param-参数对象 -network-网络请求 -ui --activity activity控制活动 --adapter 适配器 --fragment 具体布局 --presetner 业务接口 --presetnerimpl 业务具体实现 --widget 各种自定义控件 -util 工具类
资源命名
图片资源
图片资源是App中内存占用最高的部分,而内存占用大小和图片的分辨率成正比,原则上项目中使用的所有分辨率较大的PNG图片资源都要尽量进行.9.png格式处理,通过减少图片分辨率来降低内存占用。
这里描述图片命名规范的范围不仅指放在drawable-hdpi、drawable-xhdpi中的png图片,也包括drawable文件夹下面采用xml生成的图片
静态图片
背景图片
a) 通用背景图片命名:bg_general_描述.png
b) 子模块背景图片命名:bg_模块名_描述.png
例如:bg_general_title.png、bg_account_logo.png
按钮图片
a) 通用按钮图片命名:btn_general_描述.png
b) 子模块按钮图片命名:btn_模块名_描述.png
例如:btn_general_ok.png、btn_account_login.png
普通Icon图片
a) 通用Icon图片命名:ic_general_描述.png
b) 子模块Icon图片命名:ic_模块名_描述.png
例如:ic_general_header.png、ic_settings_network.png
动态图片
背景图片
a) 通用背景图片命名:
bg_general_描述_selected[unselect|pressed].png,
对应drawable文件夹下selector命名:bg_general_描述_selector.xml
b) 子模块背景图片命名:
bg_模块名_描述_selected[unselect|pressed].png,
对应drawable文件夹下selector命名:bg_模块名_描述_selector.xml
按钮图片
a) 通用按钮图片命名:
btn_general_描述_selected[unselect|pressed].png,
对应drawable文件夹下selector命名:btn_general_描述_selector.xml
b) 子模块按钮图片命名:
btn_模块名_描述_selected[unselect|pressed].png,
对应drawable文件夹下selector命名:btn_模块名_描述_selector.xml
通用字符串资源
通用的字符串资源一般不与特定模块关联,字符串定义直接按中英文翻译即可。例如在strings.xml文件中定义如下字符串资源:
Yes
No
Load More
Cancel
Save
Add
子模块字符串资源
子模块字符串资源定义格式规范:子模块名_英文描述。例如在strings.xml文件中分别定义如下字符串资源:
Sorry, an error occurred while attempting to delete the %s.
Sorry, %s could not be refreshed at this time. Please try again later. Sorry, an error occurred while uploading the %s.
Title
Description
Enter a title here
颜色资源
默认颜色资源
为了防止颜色资源重复定义,便于统一管理,会在colors.xml文件中定义整个应用默认的几种主色调,颜色的英文名字定义不要与模块名关联,例如:
子模块特有颜色资源
如果子模块有特殊的定制需求,可以在colors.xml文件中定义对应模块的颜色资源,颜色的英文名定义规范:模块名_描述_color[background]。例如:
布局资源
自定义布局的命名规范如下:
- Activity content view:activity_模块名_描述.xml
- Fragment content view: fragment_模块名_描述.xml
- Dialog对话框布局:dialog_模块名_描述.xml
- 列表项布局:list_描述_item.xml
- 子模块其他类型布局:view_模块名_描述.xml
类和接口命名
使用大驼峰规则,用名词或名词词组命名,每个单词的首字母大写。
以下为几种常用类的命名:
activity类,命名以Activity为后缀,如:LoginActivity
fragment类,命名以Fragment为后缀,如:ShareDialogFragment
service类,命名以Service为后缀,如:DownloadService
adapter类,命名以Adapter为后缀,如:CouponListAdapter
工具类,命名以Util为后缀,如:EncryptUtil
模型类,命名以BO为后缀,如:CouponBO
接口实现类,命名以Impl为后缀,如:ApiImpl
成员变量规范
方法命名规则
在layout布局文件中,所有控件ID采用小写下划线命名法。
以下为几种常用方法的命名:
初始化方法,命名以init开头,例:initView
按钮点击方法,命名以to开头,例:toLogin
设置方法,命名以set开头,例:setData
具有返回值的获取方法,命名以get开头,例:getData
通过异步加载数据的方法,命名以load开头,例:loadData
布尔型的判断方法,命名以is或has,或具有逻辑意义的单词如equals,例:isEmpty
控件View变量命名规则
由于采用了xutils3 框架的注解框架,所以对应的控件View的类成员变量也采取和Id一致的命名规则,例如:
/** 登录按钮 **/
@ViewInject(R.id.btn_login)
Button btn_login;
/** 注册按钮 **/
@ViewInject(R.id.btn_register)
Button btn_register;
/** 用户名**/
@ViewInject(R.id.et_account)
EditText et_account;
/** 密码 **/
@ViewInject(R.id.et_pwd)
EditText et_pwd;
@ViewInject(R.id.tv_title)
TextView tv_title;
控件缩写对照表
控件 | 缩写 | 控件 | 缩写 |
---|---|---|---|
TextView | txt | EditText | et |
Button | btn | ImageButton | ibtn |
ImageView | img | ListView | list |
RadioGroup | rg | RadioButton | rbtn |
ProgressBar | progress | SeekBar | seek |
CheckBox | ck | Spinner | spinner |
TableLayout | tablel | TableRow | row |
LinearLayout | layout | RelativeLayout | rlayout |
ScrollView | scroll | SearchView | search |
TabHost | host | TabWidget | widget |
PopupWindow | pw |
其他成员变量命名规则
其他类型的成员变量命名规则为:m+类名,Boolean类型的成员变量命名规则为:is+逻辑名。例如:
private Context mContext;
private long mUserId;
private boolean isToOpenGps = false;
常量命名
全部为大写单词,单词之间用下划线分开。
public final static int PAGE_SIZE = 20;
成员变量书写顺序
依次是:公开的静态final常量、私有的静态final常量、公开成员变量、私有成员变量、控件View变量放在最后。
禁止的编码规范
- 禁止在不同地点出现相同或相似的逻辑代码块或layout代码块
- 禁止只出现一次的成员变量,禁止出现可以简单计算替换的成员变量和临时变量
- 禁止在一块代码中插入没有上下文的代码
- 禁止在BroadcastReceiver的onReceiver()方法中注册观察者,使用线程,或Handler异步任务
- 禁止在Activity之间或者Activity和Service之间互相持有对方并且直接调用对方的函数或成员变量,如finish(),stopSelf()等方法
- 禁止同时在Mainfest文件和代码或者layout和代码中,分散初始化业务/控件相关属性
- 禁止一个实例化对象的成员变量在另外一个对象中直接被修改,特别是View的属性值只能由持有这个View的对象修改
- 禁止将AsycTask用于执行超长时间的异步任务,如网络长时间连接;禁止将AsycTask用于不需要后台任务跟UI线程交互的场景
- 禁止在接收启动广播中读写文件、SharePreference、数据库等阻碍系统启动的费时任务
建议的编码规范
- 建议不要在Adapter的getView()、bindView()这类对性能敏感的函数中构造新对象或Listener对象
- 建议静态对象或者单例模式中不要持有Activity(context)或Bitmap等大型成员对象
- 建议异步任务运行后,主线程退出时执行异步任务的取消或中止操作
- 建议不要把Handler定义成局部变量来使用,不要在单个类对象或者单个线程中创建多个Handler对象
- 建议在以on开头的回掉函数中不使用for循环、数据库操作、文件操作等费时任务,例如onCreate()、onResume()、onPause等方法中
- 建议不在主线程(UI线程)中执行数据库查询操作或Bitmap创建解析操作
- 建议在两个模块传递参数的时候,不要传递List列表的索引或者位置参数