Android开发命名规范

本文为 Crocutax 原创 , 转载请注明出处 http://www.crocutax.com

核心原则

  • 见名知意
  • 严格执行命名规范
  • 全局禁用拼音

分包规范

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

com.xxx.activity    Activity类
com.xxx.service     Service
com.xxx.receiver    BroadCastReceiver
com.xxx.provider    ContentProvider
com.xxx.base        基类
com.xxx.adapter     ViewPager/RecyclerView等适配器
com.xxx.util        各种StringUtil,NetUtil,BitmapUtil等工具类 
com.xxx.view        自定义view/第三方开源控件
com.xxx.bean        各种实体类,下面可以再细分VO,PO,DTO
com.xxx.db          数据库操作类

注意:

  • 部分特殊的第三方SDK,比如微信支付,Zxing,讯飞语言等对如果对包位置有特殊要求的,按第三方要求来
  • MyApplication等全局相关的配置类,放在包名目录下

命名规范

Activity / Fragment / Adapter / Bean...

类名由一个或多个单词组成,采用 大驼峰命名法

同一界面,不同类型的类,前缀必须一样,比如:HomePageActivity,HomePageFragment,HomePageListAdapter...

Listener

Listener接口监听事件的命名规范:以On开头Listener作为后缀。
具体:On+事件描述+Listener

例如:点击事件:OnClickListener

对应的调用方法:setOnClickListener()

常量

常量命名采用 : 全大写 + 下划线方式例如:

public static final int LOGIN_FLAG = 1 ;

intent标记的key以INTENT 开头 , 各个单词以_隔开,例如:

public static final String INTENT_CAR_ID = "intentCarId";

变量

变量以小驼峰式命名法,不同类型的变量又有不同的命名方式.

私有成员变量

必须以"m"开头 + 变量名

例如:
private int mThemeId = 0;
private boolean mIsOpen;
private List<Strng> mUrlList;

静态成员变量

必须以"s"开头 + 变量名

private static boolean sIsOpen = false;

局部变量

小驼峰命名法

public String getUserName(){
    String userName = getUserNameFromDB();
    ...
}

方法

方法命名规则采用小驼峰命名法例如:

onCreate() / onResume() / onRun()
getXX()返回某个值的方法
initXX() 初始化相关方法,比如初始化布局:initView()
checkXX()和isXX()方法为boolean值的时候使用is或者check为前缀
saveXX() 保存数据
clearXX()和removeXX() 清除数据
updateXX() 更新数据
processXX() 对数据进行处理
dispalyXX() 显示某某信息

对于方法的其他一些规范

  • 方法的参数尽可能不超过4个,多余4个考虑采用builder模式或者JavaBean形式
  • 注意单一职责原则
  • 方法尽量避免返回null,可以考虑抛异常或空数据,比如Collections.emptyList()

类声明规范

区块划分

建议使用注释将源文件分为明显的区块,区块划分如下

常量声明区
UI控件成员变量声明区
普通成员变量声明区
内部接口声明区
初始化相关方法区
事件响应方法区
普通逻辑方法区
重载的逻辑方法区
生命周期回调方法区
内部类声明区

类成员排列通用规则

按照发生的先后顺序排列
常量按照使用先后排列
UI控件成员变量按照layout文件中的先后顺序排列
普通成员变量按照使用的先后顺序排列
方法基本上都按照调用的先后顺序在各自区块中排列
相关功能作为小区块放在一起(或者作为一个封装体引入)
重载方法永不分离,当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。

资源文件命名规范

  • Activity对应的布局文件命名:XxxActivity--> activity_xxx.xml,比如MainActivity.java--> activity_main.xml
  • XML中控件命名:控件名界面名作用,例如:tv_homepage_name ,et_login_phone
  • 图片命名,资源文件,控件id命名:activity名称+功能名称(背景bg,按钮bt,图片控件iv等)+自己名称
  • RecyclerView / ListView中的item布局文件命名规范:以item_list作为前缀,以页面名称作为中缀,以列表描述作为后缀。具体:"item_list_"+页面名称+列表描述,例如:item_list_login_users.xml
  • Dialog布局文件命名规范:以dialog作为前缀,如果是通用的dialog则以common作为中缀以功能描述作为后缀。如果是对应页面定制的dialog,以页面描述作为中缀,dialog描述作为后缀。
    具体:

通用的dialog:dialog+common+功能描述,例如dialog_common_hint.xml

指定页面的dialog:dialog+页面名称+功能描述,例如dialog_login_pwd_error.xml

values下文件命名

strings.xml

直接以对应的内容的英文单词组合命名.例如:

<string name="buy_ticket">购票</string>
<string name="region_list">景区列表</string>

colors.xml

具体:页面+"_"+描述+颜色名称,例如:
登录页面登录按钮字体颜色

<!--登录页面登录按钮字体颜色  -->  
<color name="login_activity_login_btn_text">#000000</color>

当然还有一些APP主题色,规范为:common_描述 ,例如:

<!--通用的item字体颜色  -->  
<color name="common_item_text">#33AACC</color>

dimens.xml文件命名

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>

drawable目录下资源文件命名规范:

selector文件

以selector作为前缀,以某个页面的作为中缀如果是多个页面就以模块名称作为中缀或者是项目通用的就以common作为中缀,以功能描述作为后缀。

具体:
selector+页面名称+功能描述
selector+模块名称+功能描述
selector+common+功能描述

例如:
登陆页面的确认按钮:selector_login_confirm_btn.xml(login为页面名称)
所有支付模块购买的按钮:selector_pay_buy_btn.xml(buy为模块名称)
所有通用按钮的背景:selector_common_btn_bg.xml

shape图形

以shape 作为前缀,如果是通用的以common作为中缀,如果是单独页面的以页面名称作为中缀,或者以模块名称作为中缀,以功能描述作为后缀。

具体形式和selector一样。

图片资源

图片资源命名规范 全部小写,采用下划线命名法,加前缀区分 命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:

用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色  

icon图片资源以ic开头;
具体: 前缀+""+页面名称+""+描述 (如果页面和描述一致的则不用重复)
欢迎页面背景图 bg_welcome.png

登录页面 登录按钮背景  bg_login_btn.png

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 白色分割线

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    中间缩小

其他注意事项

  • 定义类或者接口 首行留空格,末尾不留;其次每个逻辑分区都要留单行空格(除普通常量定义外)
  • 定义类或者接口变量时,请使用基类或者顶层接口定义变量
  • 自行控制类、接口、及其成员的访问权限,尽量缩小访问权限
  • 类如果不是为扩展而设计的请加final修饰符
  • 遇到switch语句时,酌情考虑将每个case语句拆分成单个函数调用
  • 接口定义不加“I”前缀,实现添加"impl"后缀,如果有必要请提供默认的实现和其它实现 (默认实现:Default+接口名+impl,其它实现 :具体扩展功能 + 接口 + impl)
  • 具有controller功能的类或者接口定义 都以 功能+“manager” 形式定义
  • 所有表示层设计的实体定义形式为 : 功能+“model”
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容