明名约定
1. 对所有标识符都通用的规则
标识符只能使用ASCII字母和数字,因此每个有效的标识符名称都能匹配正则表达式\w+。
2. 标识符类型的规则
- 包名
包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xx(公司名称),三级包名(平台),四级包名(项目),五级包名(模块名称或者层级名称)。
此包中包含
页面用到的Activity类 (activitie层级名用户界面层)
com.xx.应用名称缩写.activity
基础共享的类
com.xx.应用名称缩写.base
页面用到的Adapter类 (适配器的类)
com.xx.应用名称缩写.adapter
页面用到的Adapter类 (适配器的类)
公共工具方法类(util模块名)
com.xx.应用名称缩写.util
JavaBean类
com.xx.应用名称缩写.bean
模型类
com.xx.应用名称缩写.model
数据库操作类
com.xx.应用名称缩写.db
自定义的View类等
com.xx.应用名称缩写.view (或者 com.xx.应用名称缩写.widget )
Service服务
com.xx.应用名称缩写.service
BroadcastReceiver服务
com.xx.应用名称缩写.receiver
注意:
如果项目采用MVP,所有M、V、P抽取出来的接口都放置在相应模块的i包下,所有的实现都放置在相应模块的impl下
- 类名
类名都以UpperCamelCase风格编写。
类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
例如
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
测试类
以它要测试的类的名称开始,以Test结束。
例如:HashTest 或 HashIntegrationTest。
抽象类
用 Abstract 做为类命名的开头
接口(interface)
命名规则与类一样采用大驼峰命名法,多以
able或ible结尾,如
interface Runnable
interface Accessible
接口实现类
在类的后面加上 Impl 如:
interface Container
class ContainerImpl
注意:
如果项目采用MVP,所有Model、View、Presenter的接口都以I为前缀,不加后缀,其他的接口采用上述命名规则。
- 方法名
方法名都以 LowerCamelCase 风格编写。
方法名通常是动词或动词短语。
初始化相关方法,使用init为前缀标识,如初始化布局initView()
initXX()
方法返回值为boolean型的请使用is或check为前缀标识
isXX() checkXX()
返回某个值的方法,使用get为前缀标识
getXX()
对数据进行处理的方法,尽量使用handle为前缀标识
handleXX()
弹出提示框和提示信息,使用display/show为前缀标识
displayXX()/showXX()
与保存数据相关的,使用save为前缀标识
saveXX()
对数据重组的,使用reset前缀标识
resetXX()
清除数据相关的
clearXX()
清除数据相关的
removeXXX()
绘制数据或效果相关的,使用draw前缀标识
drawXXX()
下划线可能出现在JUnit测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test_,例如testPop_emptyStack。
并不存在唯一正确的方式来命名测试方法。
- 常量名
常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词。那,到底什么算是一个常量?
每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。
例如,如果任何一个该实例的观测状态是可变的,则它几乎肯定不会是一个常量。只是永远不打算改变对象一般是不够的,它要真的一直不变才能将它示为常量。
// Constants
static final int NUMBER = 5;
static final ImmutableList NAMES = ImmutableList.of("Ed", "Ann");
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }
// Not constants
static String nonFinal = "non-final";
final String nonStatic = "non-static";
这些名字通常是名词或名词短语。
-
非常量字段名
非常量字段名以LowerCamelCase风格的基础上改造为如下风格:基本结构为scopeVariableNameType,
scope:范围非公有,非静态字段命名以m开头。
静态字段命名以s开头。
公有非静态字段命名以p开头。
公有静态字段(全局变量)命名以g开头。
public static final 字段(常量) 全部大写,并用下划线连起来。
例子:
public class MyClass {
public static final int SOME_CONSTANT = 41;
public int pField;
private static MyClass sSingleton;
int mPackagePrivate;
private int mPrivate;
protected int mProtected;
public static int gField;
}
使用1字符前缀来表示作用范围,1个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字母小写,这样保证了对变量名能够进行正确的断句。
3. 资源文件命名规范
- 资源布局文件(XML文件(layout布局文件)):
全部小写,采用下划线命名法
contentview 命名
必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
例如:activity_main.xmlDialog命名:dialog_描述.xml
例如:dialog_hint.xmlPopupWindow命名:ppw_描述.xml
例如:ppw_info.xml列表项命名:item_描述.xml
例如:item_city.xml包含项命名:模块(位置)描述.xml
例如:activity_main_head.xml、activity_main_bottom.xml
注意:通用的包含项命名采用:项目名称缩写描述.xml
例如:xxxx_title.xml
- 资源文件(图片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_整体效果(selector)
btn_xx
按钮图片使用btn_正常情况效果
btn_xx_normal
按钮图片使用btn_点击时候效果
btn_xx_pressed
state_focused聚焦效果
btn_xx_focused
state_enabled (false)不可用效果
btn_xx_disabled
state_checked选中效果
btn_xx_checked
state_selected选中效果
btn_xx_selected
state_hovered悬停效果
btn_xx_hovered
state_checkable可选效果
btn_xx_checkable
state_activated激活的
btn_xx_activated
背景图片使用bg_功能_说明
bg_head
默认图片使用def_功能_说明
def_search_cell
图标图片使用ic_功能_说明
ic_more_help
具有分隔特征的图片使用seg_功能_说明
seg_list_line
选择图标使用sel_功能_说明
sel_ok
注意:
使用AndroidStudio的插件SelectorChapek可以快速生成selector,前提是命名要规范,组件化下各模块资源文件需要统一加上前缀或者后缀
- 动画文件(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
- 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_bg friend_bg transparent gray
styles
styles的name命名使用 Camel命名法,采用以下规则:模块名+逻辑名称
main_tabBottom
- layout中的id命名
命名模式为:view缩写_view的逻辑名称
使用 AndroidStudio 的插件 ButterKnife Zelezny,生成注解非常方便。
如果不使用 ButterKnife Zelezny,则建议使用 view 缩写做后缀,如:username_tv(展示用户名的TextView)