Android代码规范

1.源代码格式规范

1.1 Java文件样式

1.1.1版权信息

版权信息必须在 java 文件的开头,比如:

/**

* description: 类说明(通用文件不用)

*Created by xujerry on 17/7/21.

* modify:

* 修改日期,修改内容,修改人(每次代码提交进行一次迭代)

* 修改日期,修改内容,修改人

*/

1.1.2包(Package)/Imports

package的名字,其后是import列表。

为了使Package的命名和java包的规范一致,采用目录命名规范。

建议在每一个包目录中,写一个package.html文件,描述该包的主要用途和结构。

1.1.3 import不要使用通配符

即,不要出现类似这样的import语句:import java.util.*;

1.1.4 import顺序和间距

import语句可分为以下几组,按照这个顺序,每组由一个空行分隔:

所有的静态导入独立成组

com.google imports(仅当这个源文件是在com.google包下)

第三方的包。每个顶级包为一组,字典序。例如:android, com, junit, org, sun

java imports5.javax imports组内不空行.

1.2 分类命名规范

1.2.1 包的名称

Java包的名字都是由小写单词组成。

例如: net.frontfree.javagroup

1.2.2 类的名称

类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,或者已对象的名称为类名。

例如:CarBean

1.2.3 方法的命名

方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头

例如: sendMessge

1.2.4 常量的命名

常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。

例如: MAX_VALUE

1.2.5 基本数据类型命名规范

Integer:int+描述          Char:chr+描述          Boolean:bln+描述

Long:lng+描述           Short:shr +描述         Double:dbl+描述

String:str+描述           Float:flt+描述          Single:sng+描述

DataTime:dt+描述         Array:arr+描述        Object:obj+描述

例如:String  srtName;

1.2.6 控件命名规范

TextView :tv_+描述

Button :btn_+描述

ImageButton :ib_+描述

ImageView :img_+描述

CheckBox :chk_+描述

RadioButton :rb_+描述

AnalogClock :ac_+描述

DigitalClock :dc_+描述

DatePicker :dp_+描述

TimePicker :tp _+描述

ToggleButton :tb_+描述

EditText:edit_+描述

ProgressBar:pb_+描述

SeekBar:sb _+描述

AutoCompleteTextView:autotxt_+描述

MultiAutoCompleteTextView:mlautotxt_+描述

ZoomControls:zc_+描述

Include:ind_+描述

VideoView:vv_+描述

WebView:wv_+描述

RatingBar:ratbr_+描述

Tab:tab__+描述

Spinner:spin_+描述

Chronometer:chro_+描述

ScrollView:sv_+描述

TextSwitcher:tswi_+描述

Gallery:gal_+描述

ImageSwitcher:imgswi_+描述

GridView:gv_+描述

ListView:lv_+描述

ExpandableList: exl_+描述

MapView: mv_+描述

1.3.变量命名规范

变量命名:前缀+类型描述+意义描述

前缀:

成员变量:m_***             局部变量:l_***          形参:a_***

注意:加了前缀的名称,第二位要变成大写

如:mTv_name,iBln_male

1.4、项目结构包名命名规范

包名

此包中包含

com.xx.应用名称缩写.ui

再分2个包

1、页面用到的Activity类 (activitie层级名用户界面层)

2、Fragment类(片段)

com.xx.应用名称缩写.base

基础共享的类

com.xx.应用名称缩写.adapter

页面用到的Adapter类 (适配器的类)

com.xx.应用名称缩写.util

此包中包含:公共工具方法类(util模块名)

com.xx.应用名称缩写.bean

下面可分:vo、po、dto 此包中包含:JavaBean类

com.xx.应用名称缩写.mvp

此包中包含:模型类model,逻辑类presenter,显示类view。

com.xx.应用名称缩写.db

数据库操作类

com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget )

自定义的View类等

com.xx.应用名称缩写.service

Service服务

com.xx.应用名称缩写.receiver

BroadcastReceiver服务

1.5、项目按功能进行类名命名规范

描述

例如

Activity 类

Activity为后缀标识

欢迎页面类WelcomeActivity

Adapter类

Adapter 为后缀标识

新闻详情适配器 NewDetailAdapter

解析类

Parser为后缀标识

首页解析类HomePosterParser

工具方法类

Util或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Util

线程池管理类:ThreadPoolManager

日志工具类:LogUtil(Logger也可)

打印工具类:PrinterUtil

数据库类

以DBHelper后缀标识

新闻数据库:NewDBHelper

Service类

以Service为后缀标识

时间服务TimeServiceBroadcast

Receiver类

以Receiver为后缀标识

推送接收JPushReceiver

ContentProvider

以Provider为后缀标识

自定义的共享基础类

以Base开头

BaseActivity,BaseFragment

1.6 资源文件命名规范

1.6.1. 资源布局文件(XML文件(layout布局文件)):

全部小写,采用下划线命名法

1) contentview 命名

必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。

所有Activity或Fragment的contentView必须与其类名对应,对应规则为:

将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。

例如:activity_main.xml

2) Dialog命名:dialog_描述.xml

例如:dialog_hint.xml

3) PopupWindow命名:ppw_描述.xml

例如:ppw_info.xml

4) 列表项命名:item_描述.xml

例如:item_city.xml

5) 包含项命名:模块_(位置)描述.xml

例如:activity_main_head.xml、activity_main_bottom.xml

注意:通用的包含项命名采用:项目名称缩写_描述.xml

例如:xxxx_title.xml

1.6.2. 资源文件(图片drawable文件夹下):

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

命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:

用途_模块名_逻辑名称

用途_模块名_颜色

用途_逻辑名称

用途_颜色

说明:用途也指控件类型(具体见UI控件缩写表)

例如:

btn_main_home.png按键

divider_maket_white.png 分割线

ic_edit.png 图标

bg_main.png 背景

btn_red.png 红色按键

btn_red_big.png 红色大按键

ic_head_small.png 小头像

bg_input.png输入框背景

divider_white.png白色分割线

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

名称

功能

btn_xx

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

btn_xx_normal

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

btn_xx_pressed

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

btn_xx_focused

state_focused聚焦效果

btn_xx_disabled

state_enabled (false)不可用效果

btn_xx_checked

state_checked选中效果

btn_xx_selected

state_selected选中效果

btn_xx_hovered

state_hovered悬停效果

btn_xx_checkable

state_checkable可选效果

btn_xx_activated

state_activated激活的

btn_xx_windowfocused

state_window_focused

bg_head

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

def_search_cell

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

ic_more_help

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

seg_list_line

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

sel_ok

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

注意:

使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范。

1.6.3. 动画文件(anim文件夹下):

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

具体动画采用以下规则:

模块名_逻辑名称

逻辑名称

refresh_progress.xml

market_cart_add.xml

market_cart_remove.xml

普通的tween动画采用如下表格中的命名方式

动画命名例子

规范写法

fade_in

淡入

fade_out

淡出

push_down_in

从下方推入

push_down_out

从下方推出

push_left

推向左方

slide_in_from_top

从头部滑动进入

zoom_enter

变形进入

slide_in

滑动进入

shrink_to_middle

中间缩小

1.6.4. values中name命名

类别

命名

示例

strings

strings的name命名使用下划线命名法,采用以下规则:

模块名+逻辑名称

main_menu_about 主菜单按键文字

friend_title好友模块标题栏

friend_dialog_del好友删除提示

login_check_email登录验证

dialog_title 弹出框标题

button_ok确认键 loading加载文字

colors

colors的name命名使用下划线命名法,采用以下规则:

模块名+逻辑名称 颜色

friend_info_bgfriend_bg transparent gray

styles

styles的name命名使用Camel命名法,采用以下规则:模块名+逻辑名称

main_tabBottom

2.1 代码编写格式要求

2.1.1代码应该用 UNIX 的格式

2.1.2 缩进

4个空格常被作为缩进排版的一个单位。缩进的确切解释并未详细制定(空格、制表符)。一个制表符(Tab)等于8个字符(而非4个)。

注意:使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度

例如:

public class className

{

public void methodName()

{

if(……)

{

for(……)

{

//some sentences

}//end for

}//end if

}//end method methodName

}

2.1.3 行长度

尽量避免一行的长度超过120个字符,因为很多终端和工具不能很好的处理。

页宽应该设置为120个字符。源代码一般不会超过这个宽度并导致无法完整显示,但这一设置也可以灵活调整。

在任何情况下,超长的语句应该在一个逗号或者一个操作符后折行。一条语句折行后,应该比原来的语句再缩进2个字符。

注意:用于文档中的例子应该使用更短的行长,长度一般不超过70个字符。

2.1.4换行

当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:

页面上不要有过多无意义的换行

在一个逗号后面断开

在一个操作符前面断开

宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开

新的一行应该与上一行同一级别表达式的开头处对齐

如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。

//换行对齐----------------------------------------------

public final static String SQL_SELECT_PRODUCT = "SELECT * "

+ " FROM TProduct WHERE Prod_ID = "

+ prodID;

2.1.5 {} 对

{} 中的语句应该单独作为一行,左括号”{“写在一行的下一行,并与一行开头对齐),右括号”}”永远单独作为一行且与其匹配行对齐,并尽量在其后说明其匹配的功能模块。较长的方法以及类、接口等的右括号后应使用//end …等标识其结束。

例如:

public class className()

{

public void methodName()

{

if(i > 1)

{

for(……)

{ //左花括号位置

//some sentences

} //右花括号一定是另起一行并与左花括号对齐

} //右花括号后尽量说明对应的功能块如:end if(i>1)

}//end method methodName

}//end class className

2.1.6操作符

操作符左右应该都有个空格。例如:int a = b

2.1.7括号

左括号和后一个字符之间不应该出现空格,同样,右括号和前一个字符之间也不应该出现空格。

下面的例子说明括号和空格的错误及正确使用:

CallProc( param ); // 错误

CallProc(param); // 正确

不要在语句中使用无意义的括号。括号只应该为达到某种目的而出现在源代码中。

下面的例子说明错误和正确的用法:

if ((i) = 42) { // 错误 - 括号毫无意义

if (i == 42) or (j == 42) then // 正确 - 的确需要括号

2.2 程序中的注释

注释代码的方式很大地影响着开发人员的工作效率以及所有维护改进代码的后继开发者的工作效率。在软件开发过程中及早注释代码,会促使开发者在开始撰写代码之前仔细考虑这些代码,从而带来更高的工作效率。

Java程序中编写注释的一些基本注意点:

2.2.1注释应该增加代码的清晰度

代码注释的目的是要使代码更易于被同时参与程序设计的开发人员以及其他后继开发人员理解。

2.2.2“如果你的程序不值得注释,那么它也很可能也不值得运行”

2.2.3避免使用装饰性内容

不要使用象广告横幅那样的注释语句。要写的是清晰的代码,不是外表可爱的代码。

2.2.4保持注释的简洁

最好的注释应该是简单明了的注释。注释不必洋洋洒洒,只需提供足够的信息使别人能够理解你的代码。

2.2.5先写注释,后写代码

写代码注释的最好方法是在写代码之前就写注释。这使开发者在写代码之前可以想想代码的功能和运行。而且这样确保不会遗漏注释。另一种方法是边写代码边写注释。因为注释可以使代码更易理解,所以在程序开发的过程中,也可以利用这一点。如果打算花些时间写注释,那么至少你应从这个过程中获得些什么。

2.2.6注释信息不仅要包括代码的功能,还应给出原因

如下面例子中的代码显示金额在 $1,000 以上(包括 $1,000)的定单可给予 5% 的折扣。为什么要这样做呢?难道有一个商业法则规定大额定单可以得到折扣吗?这种给大额定单的特殊是有时限的呢,还是一直都这样?最初的程序设计者是否只是由于慷慨大度才这样做呢?除非它们在某个地方(或者是在源代码本身,或者是在一个外部文档里)被注释出来,否则阅读者不可能知道这些。

if (grandTotal >= 1000.00){

grandTotal = grandTotal * 0.95;

}

Java有三种注释语句风格:以 /* 开始, / 结束的文档注释;以 / 开始,以 / 结束的C语言风格注释;以及以 // 开始,代码行末尾结束的单行注释。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容