赵雅智_Android编码规范

注释 

导入mycodetemplates.xml统一注释样式

需要加注释的地方

  1. 类注释(必加)
  2. 方法注释(必加)
  3. 块注释主要是数据结构和算法的描述(必加)
  4. 类成员变量和常量注释(选择性添加)
  5. 单行注释,主要是case的判断(选择性添加)


声明 

类和接口声明 

  下表描述了类和接口声明的各个部分以及它们出现的先后次序。 


类/接口声明的各部分 
注解
1        
/接口文档注释(/**……*/) 
类的功能等信息
2 类的(静态)变量 
首先是类的公共变量,随后是保护变量,再后是包一级别的变量(没有访问修饰符,access modifier),最后是私有变量。
3 实例变量 
首先是公共级别的,随后是保护级别的,再后是包一级别的(没有访问修饰符),最后是私有级别的。 
4 方法 
这些方法应该按功能,而非作用域或访问权限,分组。例如,一个私有的类方法可以置于两个公有的实例方法之间。其目的是为了更便于阅读和理解代码。 
5 构造器 



变量声明  

推荐一行一个声明,因为这样以利于写注释,使用制表符:对齐

        

        int        level;        // indentation level

        int        size;         // size of table

        char       username;    // username

 

 

命名规范 

.java代码中不出现中文,最多注释中可以出现中文

包命名

采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为hbsi,三级包名根据应用进行命名,四级包名为模块名或层级名

例如:com.hbsi.education.activity

目录结构

  以[com].[hbsi].[项目名]. [组件].的方式命名:如下图 所示

com

hbsi        

education        

activity

common        

adapter

service

parser

bean

utils

dao

manager

receiver

 

类命名

采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

继承自系统组件类的命名,后缀必须明确表示出系统组件的类

  • Activity类后缀使用Act
  • Service类后缀使用Service
  • BroadcaseReceiver类后缀使用Receiver
  • ContentProvider使用Provider
  • Adapter类后缀使用adpter
  • 逻辑处理类后缀使用mgr
  • 数据库类后缀使用DBHelper

接口命名

采用大驼峰命名法,多以able或ible结尾,如interface Runna ble ;interface Accessible 。



方法命名

动词或动名词,采用小驼峰命名法 例如:onCreate(),run()

  • initXXX()    初始化相关方法,使用init为前缀标识
  • isXXX()      checkXXX() 方法返回值为boolean型的请使用is或check为前缀标识
  • getXXX()     返回某个值的方法,使用get为前缀标识
  • processXXX() 对数据进行处理的方法,尽量使用process为前缀标识
  • postXXX() 传回数据,使用post为前缀标识
  • saveXXX()    与保存数据相关的,使用sav为e前缀标识
  • resetXXX()   对数据重组的,使用reset前缀标识
  • clearXXX()removeXXX()  清除数据相关的,使用clear或remove为前缀标识
  • drawXXX()     绘制数据或效果相关的,使用draw前缀标识

需要注意的一点,所有的gettersetter方法都使用系统自动生成的方法生成。



变量命名

采用小驼峰命名法。类中控件名称必须与xml布局id保持一致。

View变量命名:控件类型描述  + 意义描述

其中系统控件中在前缀中体现控件类型,比如tvName如下所示:


组件名称
前缀 组件名称
前缀
组件名称
前缀
Button
btn
RadioButton        
Rb        RelativeLayout       
rl         
ImageButton        
ibtn         
TextView
tv LinearLayout
ll
ImageView
iv ListView
lv TableLayout
tl
ProgressBar
pb
EditText
et AbsoluteLayout
al
ScrollView
sv
CheckBox
cb FrameLayout
fl


 注:绝对不允许出现,变量首字母大写和有下划线的情况出现,常量命名除外。

用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。

量词列表:量词后缀说明

  • First  一组变量中的第一个
  • Last   一组变量中的最后一个
  • Next   一组变量中的下一个变量
  • Prev   一组变量中的上一个
  • Cur    一组变量中的当前变量

常量

全部大写,采用下划线命名法.例如:MIN_WIDTH


XML文件(布局文件)

全部小写,采用下划线命名法
  • Activity默认布局,加上前缀act_
  • Activity子布局,加上前缀act_,追加父布局名称和子布局功能说明。
例如:Activity默认布局:act_homeposter.xml   子布局为item_homeposter_poster.xml

资源命名

资源的命名必须以全部单词小写,单词间以下划线分割并且使用名词或名词词组,即使用 模块名_功能名称 来命名,公共的资源使用 common_模块名_功能名称。

btn_login_normal

按钮图片使用btn_功能_说明

bg_head

背景图片使用bg_功能_说明

def_search_cell

默认图片使用def_功能_说明

icon_more_help

图标图片使用icon_功能_说明

seg_list_line

具有分隔特征的图片使用seg_功能_说明

sel_ok

选择图标使用sel_功能_说明



动画文件(anim包)

全部小写,采用下划线命名法,加前缀区分。

 

动画命名例子

规范写法

备注

click_head_left

点击背景切换动画使用click前缀标识

 

bg_shape_rectangle

背景自定义图形使用bg前缀标识

 

show_shopcar_add

小动画效果使用show前缀标识

 



资源ID命名

大小写规范与方法名一致,采用小驼峰命名法。命名规范为“资源控件的缩写  名”+“变量名”。

注意:页面控件名称应该和控件id名保持一致


strings.xml中的id命名

命名模式:

activity名称_功能模块名称_逻辑名称

activity名称_逻辑名称/common_逻辑名称

strings.xml中,使用activity名称注释,将文件内容区分开来


drawable中的图片命名

命名模式:activity名称_逻辑名称/common_逻辑名称



开发注意事项

  • 将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中;
  • 图片尽量分拆成多个可重用的图片
  • 图片尽量进行.9处理
  • 服务端可以实现的,就不要放在客户端
  • 引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
  • 使用静态变量方式实现界面间共享要慎重
  • Log(系统名称 模块名称 接口名称,详细描述)
  • 单元测试(逻辑测试、界面测试)
  • 不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
  • activity中在一个View.OnClickListener中处理所有的逻辑
  • strings.xml中使用%1$s实现字符串的通配
  • 如果多个Activity中包含共同的UI处理,那么可以提炼一个CommonActivity,把通用部分叫由它来处理,其他activity只要继承它即可
  • 使用button+activitgroup实现tab效果时,使用Button.setSelected(true),确保按钮处于选择状态,并使activitygroup的当前activity与该button对应
  • 如果所开发的为通用组件,为避免冲突,将drawable/layout/menu/values目录下的文件名增加前缀
  • 数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。