Android代码规范

1.前言

  • 为了能够更好的阅读和美观,现对Android端代码进行统一规范。该文档参考

阿里开发手册

2.命名规范

2.1 文件编码
  • 源文件编码格式采用UTF-8
2.2 包名
  • 项目包名采用倒网址方式命名方式,”com”+公司简写+项目名
com.yxzc.community
2.3 变量名
  • Java变量名、类名严格按照驼峰法命名。

  • 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。

  • 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

  • 正确的英文拼写和语法可以让阅读者易于理解,避免歧义

  • 需要时才声明,并尽快进行初始化

  • 不要使用组合声明,比如int a, b;。

  • 例如:

private int mBitmapWidth; 
private int mBitmapHeight; 
private float mDrawableRadius;
private float mBorderRadius;
2.4 资源文件名
  • 布局文件名、图片文件名、资源id等,皆由小写字母+数字+下划线组成,不能又数字打头,多个单词由下划线隔开
  • 全部小写,采用下划线命名法
2.4.1 contentview 命名
  • 必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
  • 所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
  • 将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
activity_main.xml
2.4.2 Dialog命名:dialog_描述.xml
dialog_username.xml
2.4.3 PopupWindow命名:ppw_描述.xml
ppw_parkinglot.xml
2.4.4 列表项命名:item_描述.xml
item_notification.xml
2.4.5 包含项命名:模块_(位置)描述.xml
activity_main_head.xml
activity_main_bottom.xml
2.5 方法名
  • 如变量名相同,但应避免太长
  • 方法名通常是动词或动词短语。
init();
getXX();
setXX();
closeXX();
addXX();
deleteXX();
removeXX();

正确格式

private void updateShaderMatrix()

错误格式

 private void setSensorListActivityAllDataInterface()
2.6常量名
  • 常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词
  • 每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。
    如:
public static final String CONTENT = "content";  
public static final String FILES = "FILES";  
public static final String LIKE = "like";  
public static final String REPORT_TYPE = "obj_type";  
public static final String REPORT_ID = "obj_id"; 
public static final String REPORT_REASON = "reason";   
public static final String REPLY = "reply";   

3.注释

3.1 块注释风格
  • 块注释与其周围的代码在同一缩进级别。它们可以是/ ... /风格,也可以是// ...风格。对于多行的/ ... /注释,后续行必须从开始, 并且与前一行的对齐。
3.2类文件注释
  • 类文件注释应包含当前类的功能信息描述,创建人,创建时间
/**
 * 共建详情页面
 * Created by ld on 2017/9/14 0014.
 */

public class TopicDetailedAty extends BaseActivity implements ITopicDetailedView,TopicOpinionAdapter.OnItemClickListener {

3.3方法注释
  • 方法注释应包含当前方法的功能信息描述,参数说明,返回值说明
/**
     * Created by ld on 2017/9/15
     * 获取话题内容
     * @param token     论坛token
     * @param topic     话题ID
     * @param num        评论条数
     * @param listener   回调接口
     */
    @Override
    public void getTopicInfo(String token, int topic, int num,final GetTopicInfoListener listener) {
3.4语句注释
  • 某些晦涩难懂的语句,应当加上注释,说明该语句作用
// 播放音频,第二个参数为左声道音量;第三个参数为右声道音量;第四个参数为优先级;第五个参数为循环次数,0不循环,-1循环;第六个参数为速率,速率最低0.5最高为2,1代表正常速度
        soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {

            public void onLoadComplete(SoundPool soundPool, int sampleId,
                                       int status) {
                soundPool.play(sourceid, 2, 2, 0, 0, 1);
            }
        });

4. 特殊字符

4.1空白字符
  • 除了行结束符序列,ASCII水平空格字符(0x20,即空格)是源文件中唯一允许出现的空白字符,这意味着:
    4.1.1. 所有其它字符串中的空白字符都要进行转义。
    4.1.2. 制表符不用于缩进(可以在IDE中Tab键设置为若干个空格)。
4.2特殊转义序列
  • 对于具有特殊转义序列的任何字符(\b, \t, \n, \f, \r, ", '及),我们使用它的转义序列,而不是相应的八进制(比如\012)或Unicode(比如\u000a)转义。
4.3ASCII字符
  • 对于剩余的非ASCII字符,是使用实际的Unicode字符(比如∞),还是使用等价的Unicode转义符(比如\u221e),取决于哪个能让代码更易于阅读和理解。
例如:
String unitAbbrev = "μs"; | 即使没有注释也非常清晰
String unitAbbrev = "\u03bcs"; // "μs" | 允许,但没有理由要这样做
String unitAbbrev = "\u03bcs"; // Greek letter mu, "s" | 允许,但这样做显得笨拙还容易出错
String unitAbbrev = "\u03bcs"; | 很糟,读者根本看不出这是什么
return '\ufeff' + content; // byte order mark | Good,对于非打印字符,使用转义,并在必要时写上注释

5.VALUES的使用

5.1文本字符串
  • 程序中出现的描述语句,提示语句,视图控件中的默认值等应放置在values/string资源文件中,通过getString调用以便后期修改以及国际化
5.2尺寸值、色值
  • 尺寸值包含字体尺寸、布局尺寸等,应放置在values/dimen;色值应放置在values/color资源文件下,方便管理修改

6.格式术语

  • 说明:块状结构(block-like construct)指的是一个类,方法或构造函数的主体。需要注意的是,数组初始化中的初始值可被选择性地视为块状结构(4.8.3.1节)。
6.1大括号
  • 大括号与if, else, for, do, while语句一起使用,即使只有一条语句(或是空),也应该把大括号写上
  • 对于非空块和块状结构,大括号遵循 Kernighan 和 Ritchie 风格 (Egyptian brackets)
  • 左大括号前不换行
  • 左大括号后换行
  • 右大括号前换行
  • 如果右大括号是一个语句、函数体或类的终止,则右大括号后换行; 否则不换行。
return new MyClass() {    
    @Override public void method() {        
        if (condition()) {
            try {
                something();
            } catch (ProblemException e) {
                recover();
            }
        }
    }
};
6.2空结构使用简洁
  • 一个空的块状结构里为空,简写成{}
void getInfo() {}
6.3换行
  • 每个语句后要换行
  • 列限制:60
    一个项目可以选择一行80个字符或100个字符的列限制,除了下述例外,任何一行如果超过这个字符数限制,必须自动换行。

7.数据结构

7.1 switch语句
  • 每个语句组包含一个或多个switch标签(case FOO:或default:),后面跟着一条或多条语句
  • 与其它块状结构一致,switch块中的内容缩进为2个空格。每个switch标签后新起一行,再缩进2个空格,写下一条或多条语句。
  • 每个switch语句都包含一个default语句组,即使它什么代码也不包含。

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