Android 命名规范和编码规范
简明概要 多写注释
一、关于命名规范
对于开发项目来说肯定是要有统一的规范,然而命名规范需要做到哪几点呢?
答: 首先,不能反人类。 再来就是,要望文而知其意。
下面就来说说具体该怎么去规范我们的代码了。How to name?
1)Java类文件
i. Activity 命名规范: 以Activity作为后缀, 例如 personActivity。
ii. Adapter命名规范: 以Adapter作为后缀, 例如 personAdapter。
iii. Entity 命名规范: 大多以Entity作为后缀, 例如 personEntity。 值得注意的是,User是全局变量,不算实体,不用这样来命名。
2)资源文件
①layout目录下(都用小写好么)
i. 页面布局文件:
以act_ 为前缀,以Activity所在的Packege作为中缀, 以Activity的名称(去掉Activity)作为后缀。
如: act_person_addcoustomer.xml 表示在Person模块下的AddCustomerActivity对应的Layout布局文件。
ii. ListView中的item布局文件:
以item_作为固定前缀,列表项的名称作为后缀。
如: item_lvuserlist.xml 表示在某个页面下有一个用户列表,控件名为lvUserList对应的item的layout布局文件。
iii. Dialog布局文件:
以dlg_作为固定前缀,Dialog的功能名称作为后缀。
如: dlg_hint.xml 表示什么呢?都知道吧
②drawable目录下
应该遵守以下命名规范:
i. 对于只在一个页面使用的资源,就以该界面的名称作为前缀
ii. 对于只在一个模块下多个页面使用的资源,就以该模块的名称作为前缀
iii. 对于在各个模块、各个页面都有可能使用的资源,例如上导航、下导航,以common作为前缀
3) Java类中控件对象
控件类型缩写 + 控件的逻辑名称(首字母大写),如登录按钮,可以命名为 btnLogin。
| 控件 | 缩写 | 控件 | 缩写 |
| LayoutView | lv | EditText | et |
| RelativeView | rv | Timepicker | tp |
| TextView | tv | toggleButton | tb |
| Button | btn | Progress | pb |
| ImageButton | img | WdbView | wv |
| ImageView | iv | RantingBar | rb |
| CheckBox | chk | Tab | tab |
| RadioButton | rb | ListView | lv |
| DatePicker | dp | MapView | mv |
4) Layout中控件对象
与Activity中对应的控件名称保持一致。
如: Button btnLogin = (Button)findViewById(R.id.btnLogin);
5) string.xml中的常量
如: loginActivity_btnLogin_text
因为这些值大多在layout中的控件上使用,所以以该常量所在的Activity名称作为前缀,后面接控件名称,再后面就可以自由发挥了。
另一个中是使用在Java代码中情景,
若和具体Activity相关,以所在Activity名称作为前缀,和上面的一样;
若涉及和公共模块和控件相关,就以common_作为前缀。
更灵活的做法是,将其按照模块拆分为多个strings文件,只要resoures 标签下都是string标签就可以了,编译打包时会自动将同类文件进行合并。
6) 常量命名
只能包含字母和下划线_, 字母全部大写,单词之间用下划线_隔开 例如: START_TIME
二、关于编码规范
1) 需要分别类存放各种类
如:
|-src
|---com.example.demo
|---activity.others
|---activity.personcenter
|---adapter
|---db
依次还有: engine、 entity、 interfaces、 listener、ui、 utils 。。。
2) 要怎么使用findViewById 语句?
3) Layout中的常量,要在资源strings.xml中定义
4) Layout中所有控件的字体大小,都定义在dimens.xml中
5) 在Activity中,定义新的生命周期,从而将onCreate方法拆分为以下3部分:
initVariables: 初始化变量(包括Intent上的数据和Activity内部使用的变量)
initViews: 加载Layout布局文件,初始化控件
loadData: 调用MobileAPI
6) 坚持使用fastJSON自定义实体来作为MobileAPI的数据载体
7) 页面之间传值,坚持使用Intent携带序列化实体数据的方式。禁止为了省事使用全局变量进行传值的方式。
8) 为控件添加事件,使用.setOnclickListener();
9) Activity中不要嵌套内部类,尽量都独立出来
10)所有Adapter,都放在adapter这个包中; Adapter绑定的数据,一律为ArrayList<自定义可序列化实体>; 在Adapter中使用 ViewHolder实体类。
11) 实体不要在不同模块间共享,但是可以在同一个模块下的不同页面之间共享。
12) 为节省内存,请使用ArrayList<自定义实体>, 而不是HashMap
13) 图片处理,请统一使用第三方组件ImageLoader 或 Fresco 来进行异步加载
14) 什么时候使用SharedPreference? 对于简单的配置信息,设置页面的各种开关; 而对于复杂的对象,比如说User类,还是要存储到本地文件中为好。
15) 尽量使用ApplicationContext 代替 Context, 否则会引起内存泄漏。 当然,也不是任何地方 ApplicationContext都可以代替Context,使用不当会导致崩溃。
16) 数据类型转换一定要进行校验。
17) 使用常量来代替枚举。 枚举的每一个值只能是一个整数,而没有toString这样的方法,所以不如在类中定义一个字符串常量方便。
Android 命名规范和编码规范的更多相关文章
- 第四章 android 命名规范和编码规范
书里面讲的比较常见,单个人也是有不同的观点: 因为android绝大部分使用java开发的,因此java相关规范适用于android: Google Style: 英文地址:http://google ...
- [旧][Android] 命名规范和编码规范
备注 原发表于2016.05.07,资料已过时,仅作备份,谨慎参考 前言 本文适用范围:已参加项目开发的人 写这篇文章的目的是为方便地对代码进行管理,让整个团队的代码规范化.这里的部分规定可能和你在其 ...
- 《从零开始学Swift》学习笔记(Day 56)——命名规范Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量, ...
- web项目开发 之 前端规范 --- HTML编码规范
此文严格按照W3C规范和部分实际项目可读性,浏览器加载,性能等众多属性权衡,做出平时前端编码规范文 档.供广大web工作者参考并实施,对维护和项目扩展升级都能省时省力. 转载请注明出处,JS前端实用开 ...
- C#命名规则和编码规范
用Pascal规则来命名属性.方法.事件和类名. public class HelloWorld { public void SayHello(string name) { } } Pascal规则是 ...
- Swift— Swift编码规范之命名规范-备
程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示 ...
- 《从零開始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自定义的名字,取一个有样而且符合规范的名字非常重要. 命名方法非常多,可是比較有名的,广泛接受命名法有: 匈牙利命名,一般仅仅是命名变量 ...
- 标准的Java编码规范手册
编码规范体现出一个开发者的基本素质,良好的编码规范可以提高团队编码的效率,避免很多不必要的问题.今天分享一个标准的Java编码规范给大家,希望对于大家今后的开发工作带来帮助. 编码规范的意义 ...
- 建立标准编码规则(四)-C#编码规范分类及实现
1 现实中的问题 在任何一个公司,每个程序员编写的习惯可能都是不一样的,大到命名空间,小到变量的名字.甚至,我们去github,里面的大牛每个开源的项目的命名规则可能都不一样. 我们通常会遇到下面的问 ...
随机推荐
- QT的Paint 系统
下面对于QT的绘制系统做一个简要说明, 这个系统主要由三部分组成, QPainter, QPaintDevice, QPaintEngine. QPainter 是一个绘制接口类,提供绘制各种面向用 ...
- POJ2240——Arbitrage(Floyd算法变形)
Arbitrage DescriptionArbitrage is the use of discrepancies in currency exchange rates to transform o ...
- Retrofit初识
Retrofit Retrofit是一套RESTful架构的Android(Java)客户端实现,基于注解,提供JSON to POJO(Plain Ordinary Java Object,简单Ja ...
- 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本: ...
- request对象常用API 获取请求参数的值 request应用 MVC设计模式
1 request对象常用API 1)表示web浏览器向web服务端的请求 2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1 ...
- poj1823,3667
又来练线段树了…… poj1823题意很简单(明显的数据结构题),区间修改和统计最长连续空区间: 有了poj3468的基础,区间修改不是什么问题了,重点是求最长连续空区间:(弱弱的我纠结了好久) 在每 ...
- 在Silverlight中的DispatcherTimer的Tick中使用基于事件的异步请求
需求:在silverlight用户界面上使用计时器定时刷新数据. 在 Silverlight 中的 DispatcherTimer 的 Tick 事件 中使用异步请求数据时,会出现多次请求的问题,以下 ...
- ExtJs批量更新
昨天这个批量更新花了我不少时间,特记下来,省得以后忘记. 批量更新的逻辑是这样的. 获取Store中需要更新的行,把行放入数组,然后再将数组转化为Json字符串,Json字符串传后后台后,解析为实体列 ...
- 弹出框页面中使用jquery.validate验证控件
弹出框页面中使用jquery.validate验证控件有几个问题需要解决: 1,弹出框的提交事件完成后如何关闭弹出框页面? 2,提交不成功如何返回当前页? 3,如果知道验证事件成功? 之前笔者都是JS ...
- 流行的MySql版本
简介 MySQL是历史上最受欢迎的免费开源程序之一.它是成千上万个网站的数据库骨干,并且可以将它(和Linux)作为过去10年里Internet呈指数级增长的一个有力证明. 那么,如果MySQL真的这 ...