Android开发代码规范

第一章 命名基本原则

在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的。比如,大小写的区分,使用不同字母开头等等。但究其本,追其源,在为一个资源其名称的时候,应该本着描述性以及唯一性这两大特征来命名,才能保证资源之间不冲突,并且每一个都便于记忆。

对于理解应用程序的逻辑流,命名方案是最有影响力的一种帮助。名称应该说明“什么”而不是“如何”。命名原则是:使名称足够长以便有一定的意义,并且足够短以避免冗长。唯一名称在编程上仅用于将各项区分开。以下几点是规范的命名方法。

 

第二章 命名基本规范

1.   编程基本命名规范

(1)  避免难懂的名称,如属性名xxK8,这样的名称会导致多义性。

(2)  在面向对象的语言中,在类属性的名称中包含类名是多余的,如Book.BookTitle,而是应该使用Book.Title。

(3)  在允许函数重载的语言中,所有重载都应该执行相似的函数。

(4)  使用动词-名词的方法来命名对给定对象执行特定操作的例程,如CalculateInvoiceTotal()。(例程是某个系统对外提供的功能接口或服务的集合)。

(5)  只要合适,在变量名的末尾或开头加计算限定符(Avg、Sum、Min、Max、Index)。

(6)  在变量名中使用互补对,如min/max、begin/end和open/close。 

(7)  布尔变量名应该包含Is,这意味着Yes/No 或True/False 值,如 fileIsFound。

(8)  即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如i 或 j。  

(9)  为了帮助区分变量和例程,对例程名称使用Pascal大小写处理(CalculateInvoiceTotal),其中每个单词的第一个字母都是大写的。对于变量名,使用 camel大小写处理(documentFormatType),其中除了第一个单词外每个单词的第一个字母都是大写的。  

(10)不要使用原义数字或原义字符串,而是使用命名常数,NUM_DAYS_IN_WEEK ,以便于维护和理解。

 

2.   包名命名规范

Java包的名字必须由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。

例如:

com.goboosoft.<项目名>.db 数据库相关

com.goboosoft.<项目名>.bean 实体类

com.goboosoft.<项目名>.constants 常量

com.goboosoft.<项目名>.ui 界面activity及fragment

com.goboosoft.<项目名>.widget 自定义组件

com.goboosoft.<项目名>.utils 系统工具类

com.goboosoft.<项目名>.service 服务

com.goboosoft.<项目名>.reciver 广播接收者

com.goboosoft.<项目名>.net 网络操作

com.goboosoft.<项目名>.base 各种父类

3.   类(classes)命名规范

类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。

实体类命名:

    -UserEntity

    -ProductEntity

    …

常量类命名:

    -URLConstants

    -SharePrefsConstants

    …

activity及fragment命名::

    -MainActivity

    -PersonFragment

    …

Adapter命名:

    -ListAdapter

    -ViewPagerAdapter

    …

自定义组件命名:

    -RefreshView

    -DateSelectView

    …

工具类命名:

-FileUtils

-EncryptUtils

-NetUtils

-ImageUtils

service 命名:

    -RefrshDataService

    …

reciver 命名:

    -RefrshDataReciver

    …

各种父类命名:

    -BaseApplication

    -BaseActivity

    -BaseFragment

   …

4.   方法(methods)命名规范

方法的名字为动词或动名词,采用小驼峰命名法(第一个单词应以小写字母作为开头,后面的单词则用大写字母开头)。

例如: onCreate(),run()

方法

说明

initXX()

 初始化相关方法,使用init为前缀标识,如初始化布局initView()

isXX()

 checkXX()方法返回值为boolean型的请使用is或check为前缀标识

getXX()

 返回某个值的方法,使用get为前缀标识

processXX() 

 对数据进行处理的方法,尽量使用process为前缀标识

displayXX()

 弹出提示框和提示信息,使用display为前缀标识

saveXX()

 与保存数据相关的,使用sav为e前缀标识

resetXX()

 对数据重组的,使用reset前缀标识

clearXX()

 清除数据相关的

removeXXX() 

 清除数据相关的

drawXXX()

 绘制数据或效果相关的,使用draw前缀标识

 

5.   变量(variables)命名规范

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

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

量词列表:量词后缀说明

First  一组变量中的第一个

Last  一组变量中的最后一个

Next  一组变量中的下一个变量

Prev  一组变量中的上一个

Cur    一组变量中的当前变量

6.   常量(Constants)命名规范

常量(Constants)全部大写,采用下划线命名法。

例如:MIN_WIDTH

 

7.   动画文件(anim)命名规范

动画文件全部存储于res/anim文件夹下,命名全部小写,采用下划线命名法,加前缀区分。

前面为动画的类型,后面为方向

动画命名例子

规范写法

备注

fade_in

淡入

 

fade_out

淡出

 

push_down_in

从下方推入

 

push_down_out

从下方推出

 

push_left

推像左方

 

slide_in_from_top

从头部滑动进入

 

zoom_enter

变形进入

 

slide_in

滑动进入

 

shrink_to_middle

中间缩小

 

 

8.   Layout文件命名规范

layout布局文件命名全部小写,采用下划线命名法。

命名例子

规范写法

备注

activity_main

Activity布局命名

 

fragment_main

Fragment 布局命名

 

user_item

adapter子布局命名

 

person_view

自定义View布局命名

 

include_head

包含项:include_模块.xml

 

dialog_time

Dialog命名

 

 

9.   资源文件命名规范

资源文件(图片drawable文件夹下):全部小写,采用下划线命名法,加前缀区分

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

如果有多种形态如按钮等除外如btn_xx.xml(selector)

名称

功能

btn_xx

 按钮图片使用btn_整体效果selector

btn_xx_normal

 按钮图片使用btn_正常情况效果

btn_xx_press

 按钮图片使用btn_点击时候效果

bg_head

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

def_search_cell

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

icon_more_help

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

seg_list_line

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

sel_ok

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

命名后缀:

后缀

说明

unit

 在使用xmltilemode来配图片时,element图片使用此后缀

nor

 图片的状态,代表普通状态

hl

 图片的状态,代表高亮状态

press

 图片的状态,代表按下状态

select

 图片的状态,代表其所占的view被选中

unselect

 图片的状态,代表其所占的view没有被选中








10. 组件ID命名规范

组件ID全部小写采用下划线命名法;

命名模式为:view缩写_模块名称_view的逻辑名称

view的缩写详情如下:

控件

缩写

LayoutView

lv

RelativeView

rv

TextView

tv

Button

btn

ImageButton        

ibtn image_btn

ImageView         

 Iv image_view

CheckBox           

chk check_box

RadioButton        

rbtn radio_btn

analogClock        

aclk

DigtalClock        

dclk

DatePicker         

dtpk

EditText           

et edit_text

TimePicker         

tmpk

toggleButton       

tgbtn

ProgressBar 

probar progress_bar

SeekBar                            

sbar sekk_bar

AutoCompleteTextView

autotv

ZoomControls       

zctl

VideoView          

vv video_view

WdbView            

wv web_view

RantingBar         

ratbar

Tab                

tab

Spinner            

spn  spinner

Chronometer        

cmt

ScollView          

sv scoll_view

TextSwitch         

txtswt  text_switch         

ImageSwitch        

imgswt image_switch

listView           

lvlist_view

ExpandableList     

elt

MapView            

mapv map_view

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 















11. 资源ID命名规范

资源ID(resourcesid):全部小写采用下划线命名法。命名规范为“资源控件的缩写名”_“变量名”。注意:页面控件名称应该和控件id名保持一致

strings.xml,colors.xml等中的id命名:

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

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

    例如:

    name_colr

    user_age

    …

第三章 其它注意事项

1.   系统Theme使用规范

在应用开发初,对于基本组件(TextView、EditView、Button、ImageButton…)的默认字体颜色、字体大小、点击效果、默认图片等等,写入到应用Theme中。对于特殊的则在Style中进行单独书写调用。

2.   Style使用规范

在开发过程中对于layout中不断重现的style,提炼出通用的style通用组件,放到styles.xml中进行调用,并且写明注释。

3.   资源ID使用规范

在开发过程中对于通用的组件ID、color ID、dimen 等等,统一提炼出来写在资源文件的顶部,注释标明为通用资源。

4.   String使用规范

在开发工程中对于需要通配的字符串不要使用多个view进行拼接,strings.xml中使用%1$s实现字符串的通配。

对于通用字符串统一提炼出来写在string.xml顶部,并写明注释。

5.  数据校验注意事项

数据一定要效验,例如:字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断。

字符串进行判空时使用Android自带的工具类 TextUtils.isEmpty()进行判断,切勿使用if(null != a && !a.equals(""))进行判断。

6.   资源文件注意事项

在开发过程中,所有的 stirng字符串、颜色字符串、dimen必须全部写入到对应资源文件中。决不允许在 *.java 及 layout.xml 中存在写死的字符串。

7.   Java代码编写注意事项

 

第四章 Java代码注释

代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率。也是程序代码可维护性的重要环节之一。所以我们不是为写注释而写注释。下面是开发中使用的代码注释规范,供大家参考下。

1.   注释原则

1、注释形式统一

在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其它项目中发现它们的注释规范与这份文档不同,按照这份规范写代码,不要试图在既成的规范系统中引入新的规范。

2、注释内容准确简洁

内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。

2.   注释条件

1、基本注释(必须加)

(a)类(接口)的注释

(b)构造函数的注释

(c)方法的注释

(d)全局变量的注释

(e)字段/属性的注释

 备注:简单的代码做简单注释,注释内容不大于10个字即可,另外,持久化对象或VO对象的getter、setter方法不需加注释。具体的注释格式请参考下面举例。

2、特殊必加注释(必须加)

(a)典型算法必须有注释。

(b)在代码不明晰处必须有注释。

(c)在代码修改处加上修改标识的注释。

(d)在循环和逻辑分支组成的代码中加注释。

(e)为他人提供的接口必须加详细注释。

 备注:此类注释格式暂无举例。具体的注释格式自行定义,要求注释内容准确简洁。

3.   注释格式

a) 单行(single-line)注释:“//……”

b) 块(block)注释:“/*……*/”

c) 文档注释:“/**……*/”

d) javadoc 注释标签语法:

@author    对类的说明标明开发该类模块的作者

@version   对类的说明 标明该类模块的版本

@see       对类、属性、方法的说明 参考转向,也就是相关主题

@param     对方法的说明 对方法中某参数的说明

@return    对方法的说明对方法返回值的说明

@exception  对方法的说明 对方法可能抛出的异常进行说明

 

4.   类功能注释 

1.  /**

2.  * <code>{类名称}</code>{此类功能描述}

3.  *

4.  *

5.  *@author   {作者中文名或拼音缩写}

6.  *

7.  * @version{版本,常用时间代替}

8.  *

9.  *@see      java.lang.Class

10. *

11. * @since    JDK{jdk版本}

12. * @createDate {创建时间}

13. */  

14. public class Object {}     

15.    

 

5.  方法功能注释 

1.  /** 

2.   

3.       * {方法的功能/动作描述} 

4.   

5.       * 

6.   

7.       * @param      {引入参数名}   {引入参数说明} 

8.   

9.       * @return      {返回参数名}   {返回参数说明} 

10. 

11.      * @exception   {说明在某情况下,将发生什么异常} 

12. 

13.      */  

14.  

15. public String substring(int beginIndex) {  

16.  

17. return substring(beginIndex, count);  

18.  

19. }  

 

6.   类方法中代码块注释

1.  /*

2.   

3.  *调用持久化类,将数据保存到库{功能描述}

4.   

5.  *

6.   

7.  *判断是添加,还是修改{具体实现动作}

8.   

9.  */  

10.   

11. boolean ifSucc = false;  

12.   

13. if(request.getParameter("YINGLI_ID")==null){   

14.   

15.        String GUID = new RandomGUID().toString();   

16.   

17.         stressTestDataBean.setUSER_ID(Integer.toString(userId));  

18.   

19.        stressTestDataBean.setSIGN_ISBN((String)vSectNum.get(0));  

20.   

21.        stressTestDataBean.setSHENHE_JIEGUO("0");   

22.   

23.        stressTestDataBean.setGUID(GUID);   

24.   

25.        stressTestDataBean.setCREATE_DATE("getdate()");   

26.   

27.        stressTestDataBean.setSTATE("A");   

28.   

29.                                            

30.   

31.        ifSucc = StressTestDataDao.addStressTestData(db,stressTestDataBean);  

32.   

33. }else{   

34.   

35.        ifSucc = StressTestDataDao.mendStressTestData(db,stressTestDataBean);  

36.   

37. }   

38.   

 

7.   字段/属性注释

1.  public class EmailEntity implements Serializable{  

2.    

3.     private String id; //发件ID  

4.    

5.     private String senderName;//发送人姓名  

6.    

7.     private String title;//不能超过120个中文字符  

8.    

9.     private String content;//邮件正文  

10.  

11.    private String attach;//附件,如果有的话  

12.  

13.    private String totalCount;//总发送人数  

14.  

15.    private String successCount;//成功发送的人数  

16.  

17.    private Integer isDelete;//0不删除 1删除  

18.  

19.    private Date createTime;//目前不支持定时 所以创建后即刻发送  

20.  

21.    privateSet<EmailList> EmailList;  

22.  

23. }  

你可能感兴趣的:(Android开发代码规范)