余物宝Android组编程规范

明名约定

1. 对所有标识符都通用的规则

标识符只能使用ASCII字母和数字,因此每个有效的标识符名称都能匹配正则表达式\w+。

2. 标识符类型的规则
  1. 包名
    包名全部小写,连续的单词只是简单地连接起来,不使用下划线。
    采用反域名命名规则,全部使用小写字母。一级包名为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下

  1. 类名
    类名都以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为前缀,不加后缀,其他的接口采用上述命名规则。

  1. 方法名
    方法名都以 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。

并不存在唯一正确的方式来命名测试方法。

  1. 常量名

常量名命名模式为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";

这些名字通常是名词或名词短语。

  1. 非常量字段名
    非常量字段名以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. 资源文件命名规范
  1. 资源布局文件(XML文件(layout布局文件)):
    全部小写,采用下划线命名法
  • contentview 命名
    必须以全部单词小写,单词间以下划线分割,使用名词或名词词组。
    所有Activity或Fragment的contentView必须与其类名对应,对应规则为:
    将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
    例如:activity_main.xml

  • Dialog命名:dialog_描述.xml
    例如:dialog_hint.xml

  • PopupWindow命名:ppw_描述.xml
    例如:ppw_info.xml

  • 列表项命名:item_描述.xml
    例如:item_city.xml

  • 包含项命名:模块(位置)描述.xml
    例如:activity_main_head.xml、activity_main_bottom.xml
    注意:通用的包含项命名采用:项目名称缩写
    描述.xml
    例如:xxxx_title.xml

  1. 资源文件(图片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,前提是命名要规范,组件化下各模块资源文件需要统一加上前缀或者后缀

  1. 动画文件(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. 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
  1. layout中的id命名

命名模式为:view缩写_view的逻辑名称
使用 AndroidStudio 的插件 ButterKnife Zelezny,生成注解非常方便。
如果不使用 ButterKnife Zelezny,则建议使用 view 缩写做后缀,如:username_tv(展示用户名的TextView)

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • Android编码规范 源文件基础 文件名 源文件以其最顶层的类名来命名,大小写敏感,文件扩展名为.java。 文...
    呼呼哥阅读 918评论 0 0
  • 文章来自https://github.com/Blankj/AndroidStandardDevelop#安卓开发...
    小庄bb阅读 736评论 0 1
  • Android 编码规范 1. 前言 这份文档是 Google Java Code Style 的译文,并稍有添加...
    人失忆阅读 435评论 0 3
  • 1、引言 数据库设计过程中表、字段等的命名规范也算是设计规范的一部分,不过设计规范更多的是为了确保数据库设计的合理...
    SnowflakeCloud阅读 40,877评论 0 48