Friday, October 9, 2015

Android 编码规范

   规范问题, 没有规矩不成方圆 。 如果编码没有规范,每个人都按照自己的性格来写代码话人多的话,你就会感觉很恶心。别人写的代码 你就不想去看. 所以规范的问题是很有必要的!

1   包命名规范

采用反域名命名规则,包名全部小写,连续的单词只是简单地连接起来,不使用下划线,一级包名为com,二级包名为xxx(可以是公司域名或者个人命名),三级包名根据应用进行命名,四级包名为模块名或层级名。如:

com.isa.crm.activity

com.isa.crm.adapter

2   JAVA类命名规范

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

3  接口命名规范

命名规则与类一样采用大驼峰命名法,多以able或ible结尾。例如:
interface Runable | interface Accessible

4 变量命名规范

采用小驼峰命名法。

成员变量命名
使用Google的m命名法;
例如:private String mUserName ()

临时变量命名
使用标准的Java命名方法,不推荐使用Google的m命名法。例如:
private String userName;

常量命名
常量使用全大写字母加下划线的方式命名。例如:

public static final String TAG = "tag";


5 控件实例命名

类中控件名称必须与xml布局id保持一致(可以去掉{module_name})。例如:

在布局文件中 Button 的id为: android:id="@+id/btn_pay"

private Button btn_pay;


6  方法命名规范

动词或动名词,采用小驼峰命名法。例如:

run(); | onCreate(); | syncProducts();


7 布局文件(Layout)命名规范

全部小写,采用下划线命名法。其中{module_name}为业务模块或是功能模块等模块化的名称或简称

activity layout: {module_name}_activity_{名称} 例如:

crm_activity_main.xml | crm_activity_shopping.xml


fragment layout:{module_name}_fragment_{名称} 例如:

crm_fragment_main.xml | crm_fragment_shopping.xml


Dialog layout: {module_name}_dialog_{名称} 例如:

crm_dialog_loading.xml


ListView列表项布局命名:{module_name}_list_item_{名称} 例如:

crm_listitem_customer.xml


include 包含项布局命名:include_{名称} 例如:

include_head.xml


adapter的子布局: {module_name}_item_{名称} 例如:

qz_item_order.xml


widget layout: {module_name}_widget_{名称} 例如:

crm_widget_shopping_detail.xml



8  资源id命名规范

命名模式为:{view缩写}_{module_name}_{view的逻辑名称},如:

顾客管理CRM模块布局 LinearLayout 的布局id –> ll_crm_content

模块简称为qz的 ImageView 的布局id –> iv_qz_photo

常见控件View与其缩写对照参考表如下:



9  图片资源文件命名规范

图标命名:{module_name}_ic_{名称} 例如:

crm_ic_app.png

背景图片命名: {module_name}_bg_{名称} 例如:

crm_bg_navbar_highlight_normal.9.png

按钮Button命名: {module_name}_btn_{名称} 例如:

crm_btn_login_normal.9.png

按钮checkbox图片命名:{module_name}_checkbox_{名称} 例如:

crm_checkbox_cart_true.png

其他图片命名:{module_name}_icon_{名称} 例如:

qz_icon_blue_circle.png



10  代码风格


大括号问题

风格一
if (hasMoney())
{

}
else
{


}




风格二

if (hasMoney()) {

} else {


}



11 空格问题

if else | while | 运算符两端 等后面需用空格隔开。例如:


规范的编写方式:

if (hasMoney()) {

} else {

}

for (int i = 0; i < 10; i++) {

}


不规范的编写方式:

if(hasMoney()){

}else{

}

for(int i=0; i<10;i++){

}


12 方法参数

当方法参数数量过多时,需进行换行处理.

建议使用:
1 传递对象的方法。
2 提取成员变量。(根据需要)
3 删除冗余的参数。



13  注释 (最好的注释 就是没有注释)

这个没有必要,我们一般没有时间写注释,除非非常重要的。一般我们只要有一个好的名字就可以看出他的作用!

13.1 实例变量、类常量进行注释说明 例如:

/ / 用户姓名(这个就是没有必要的,通过名字我们就知道他的作用)
private String userName


13.2 类、接口进行注释说明 
接口比较抽象和通用,所以对接口和接口中的方法写注释 是很有必要的!
例如:

/**
* Activity基类
*
*/
public class BaseActivity extends Activity
{
}


13.3 方法进行注释说明 例如:

/**
* 请求
*
* @param path 路径
* @param generalParams 基本参数
* @param businessParams 业务参数
* @return 请求结果
* @throws ApiException 请求错误则返回该异常
*/
public Map<String, Object> request (String path,
              Map<String, Object> generalParams,
              Map<String, Object> businessParams) throws ApiException {
   return null;
}



注解:

驼峰式命名法(CamelCase)

大驼峰式命名法(UpperCamelCase):
每个单词的第一个字母都大写 如:XmlHttpRequest
小驼峰式命名法(lowerCamelCase):
除了第一个单词,每个单词的第一个字母都大写 如:xmlHttpRequest
说明


参考网址:

1 非常好的参考


No comments:

Post a Comment