Android 命名规范 (提高代码可以读性)

本贴最后更新于 2583 天前,其中的信息可能已经时移世改

刚接触 Android 的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间。如果就是我一个人开发,一个人维护的话还好,可是如果一个项目是团队分工合作,这样让你的同事去看你的代码就更加吃力了,因为大家之间的编程方式不一样,所以,在开发过程中,命名规范统一尤为重要,最好是团队中统一好大家命名方法,这样对于日后的工作会轻松很多。

   在面试的时候,审核一个程序员的编程水平的时候,命名规范也是一大标准,所以,下面我就总结下我从网上别人的经验和自己的感悟中收集总结的android命名规范,希望对大家有所帮助。

   提醒:在命名规范的统一下,在加上注释,这样日后维护会高效快捷好多。

先初略介绍下当前主要的标识符命名法和英文缩写规则:(这段别人那边借鉴的)

在讲解命名规范前,先初略介绍下当前主要的标识符命名法和英文缩写规则。
**
**标识符命名法
标识符命名法最要有四种:

1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。

2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写

3 下划线命名法:单词与单词间用下划线做间隔。

4 匈牙利命名法:广泛应用于微软编程环境中,在以 Pascal 命名法的变量前附加小写序列说明该变量的类型。 量的取名方式为: + + 范围前缀,类型前缀,限定词。

个人觉得标识符命名原则:尽可能的用最少的字符而又能完整的表达标识符的含义。

英文缩写原则:
1 较短的单词可通过去掉“元音”形成缩写
2 较长的单词可取单词的头几个字母形成缩写
3 此外还有一些约定成俗的英文单词缩写.

下面为常见的英文单词缩写:

|

名称

|

缩写

|
|

icon

|

ic (主要用在 app 的图标)

|
|

color

|

cl(主要用于颜色值)

|
|

divider

|

di(主要用于分隔线,不仅包括 Listview 中的 divider,还包括普通布局中的线)

|
|

selector

|

sl(主要用于某一 view 多种状态,不仅包括 Listview 中的 selector,还包括按钮的 selector)

|
|

average

|

avg

|
|

background

|

Bg(主要用于布局和子布局的背景)

|
|

buffer

|

buf

|
|

control

|

ctrl

|
|

delete

|

del

|
|

document

|

doc

|
|

error

|

err

|
|

escape

|

esc

|
|

increment

|

inc

|
|

infomation

|

info

|
|

initial

|

init

|
|

image

|

img

|
|

Internationalization

|

I18N

|
|

length

|

len

|
|

library

|

lib

|
|

message

|

msg

|
|

password-

|

pwd

|
|

position

|

pos

|
|

server

|

srv

|
|

string

|

str

|
|

temp

|

tmp

|
|

window

|

wnd(win)

|

程序中使用单词缩写原则:不要用缩写,除非该缩写是约定俗成的。

命名规范:

1 包(packages): 采用反域名命名规则,全部使用小写字母。一级包名为 com,二级包名为 xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名

|

包名

|

此包中包含

|
|

com.xx.应用名称缩写.activities

|

页面用到的 Activity 类 (activities 层级名用户界面层)

|
|

com.xx.应用名称缩写.base

|

页面中每个 Activity 类共享的可以写成一个 i 额 BaseActivity 类 (基础共享的类)

|
|

com.xx.应用名称缩写.adapter

|

页面用到的 Adapter 类 (适配器的类)

|
|

com.xx.应用名称缩写.tools

|

此包中包含:公共工具方法类(tools 模块名)

|
|

com.xx.应用名称缩写.bean

(或则 com.xx.应用名称缩写.unity )

|

此包中包含:元素类

|
|

com.xx.应用名称缩写.db

|

数据库操作类

|
|

com.xx.应用名称缩写.view

(或则 com.xx.应用名称缩写.ui )

|

自定义的 View 类等

|
|

com.xx.应用名称缩写.service

|

Service 服务

|
|

com.xx.应用名称缩写.broadcast

|

Broadcast 服务

|

2 类(classes):名词,采用大驼峰命名法,尽量避免缩写,除非该缩写是众所周知的, 比如 HTML,URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

|

|

描述

|

例如

|
|

activity 类

|

Aty 或者 Activity 为后缀标识

|

欢迎页面类 WelcomeAty.或者 WelcomeActivity

|
|

Adapter 类

|

Adp 或者 Adapte 为后缀标识

|

新闻详情适配器 NewtDetailAdp 或则直接 NewDetailAdapter

|
|

解析类

|

Hlr 为后缀标识

|

首页解析类 HomePosterHlr

|
|

公共方法类

|

Tools 或 Manager 为后缀标识

|

线程池管理类:ThreadPoolManager
日志工具类:LogTools

|
|

数据库类

|

以 DBHelper 后缀标识

|

新闻数据库:NewDBHelper

|
|

Service 类

|

以 Service 为后缀标识

|

时间服务 TimeService

|
|

BroadcastReceive 类

|

以 Broadcast 为后缀标识

|

时间通知 TimeBroadcast

|
|

ContentProvider

|

以 Provider 为后缀标识

| |
|

直接写的共享基础类

|

以 Base 开头

|

BaseActivity,BaseFragment

|

3 接口(interface):命名规则与类一样采用大驼峰命名法,多以 able 或 ible 结尾,如 interface Runna ble ;
interface Accessible 。

4 方法(methods):动词或动名词,采用小驼峰命名法例如:onCreate(),run()

|

方法

|

说明

|
|

initXX()

|

初始化相关方法,使用 init 为前缀标识,如初始化布局 initView()

|
|

isXX()

|

checkXX()方法返回值为 boolean 型的请使用 is 或 check 为前缀标识

|
|

getXX()

|

返回某个值的方法,使用 get 为前缀标识

|
|

processXX()

|

对数据进行处理的方法,尽量使用 process 为前缀标识

|
|

displayXX()

|

弹出提示框和提示信息,使用 display 为前缀标识

|
|

saveXX()

|

与保存数据相关的,使用 sav 为 e 前缀标识

|
|

resetXX()

|

对数据重组的,使用 reset 前缀标识

|
|

clearXX()

|

清除数据相关的

|
|

removeXXX()

|

清除数据相关的

|
|

drawXXX()

|

绘制数据或效果相关的,使用 draw 前缀标识

|

5 变量(variables)采用小驼峰命名法。类中控件名称必须与 xml 布局 id 保持一致。

用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用 strCustomerFirst 和 strCustomerLast,而不要使用 strFirstCustomer 和 strLastCustomer。
量词列表:量词后缀说明
First 一组变量中的第一个
Last 一组变量中的最后一个
Next 一组变量中的下一个变量
Prev 一组变量中的上一个
Cur 一组变量中的当前变量

6 常量(Constants)全部大写,采用下划线命名法.例如:MIN_WIDTH

7 资源文件(图片 drawable 文件夹下):全部小写,采用下划线命名法,加前缀区分

命名模式:activity 名称_逻辑名称/common_逻辑名称

如果有多种形态如按钮等除外如 btn_xx.xml(selector)

|

名称

|

功能

|
|

btn_xx

|

按钮图片使用 btn_整体效果**(selector)**

|
|

btn_xx_normal

|

按钮图片使用 btn_正常情况效果

|
|

btn_xx_press

|

按钮图片使用 btn_点击时候效果

|
|

bg_head

|

背景图片使用 bg_功能_说明

|
|

def_search_cell

|

默认图片使用 def_功能_说明

|
|

icon_more_help

|

图标图片使用 icon_功能_说明

|
|

seg_list_line

|

具有分隔特征的图片使用 seg_功能_说明

|
|

sel_ok

|

选择图标使用 sel_功能_说明

|

命名后缀:

|

后缀

|

说明

|
|

unit

|

在使用 xml 的 tilemode 来配图片时,element 图片使用此后缀

|
|

nor

|

图片的状态,代表普通状态

|
|

hl

|

图片的状态,代表高亮状态

|
|

press

|

图片的状态,代表按下状态

|
|

select

|

图片的状态,代表其所占的 view 被选中

|
|

unselect

|

图片的状态,代表其所占的 view 没有被选中

|


8 资源布局文件(XML 文件(layout 布局文件)):

全部小写,采用下划线命名法

1).contentview 命名, Activity 默认布局,以去掉后缀的 Activity 类进行命名。不加后缀:

** 功能模块.xml
**

   例如:main.xml、more.xml、settings.xml

    或则:activity_功能模块.xml

    例如:**activity_main.xml、activity_more.xml**

2).Dialog 命名:dialog_描述.xml

   例如:**dlg_hint.xml**

2).PopupWindow 命名:ppw_描述.xml

   例如:**ppw _info.xml**

3). 列表项命名 listitem_描述.xml

   例如:**listitem_city.xml**

4).包含项:include_模块.xml

   例如:**include_head.xml、include_bottom.xml**

5).adapter 的子布局:功能模块_item.xml

   例如:**main_item.xml、**

9 动画文件(anim 文件夹下):全部小写,采用下划线命名法,加前缀区分。

//前面为动画的类型,后面为方向

|

动画命名例子

|

规范写法

|

备注

|
|

fade_in

|

淡入

|

|
|

fade_out

|

淡出

|

|
|

push_down_in

|

从下方推入

|

|
|

push_down_out

|

从下方推出

|

|
|

push_left

|

推像左方

|

|
|

slide_in_from_top

|

从头部滑动进入

|

|
|

zoom_enter

|

变形进入

|

|
|

slide_in

|

滑动进入

| |
|

shrink_to_middle

|

中间缩小

| |

10 资源 ID(resourcesid):大小写规范与方法名一致,采用小驼峰命名法。命名规范为“资源控件的缩写 名”+“变量名”。注意:页面控件名称应该和控件 id 名保持一致

** strings.xml,colors.xml 等中的 id 命名:**

命名模式:activity 名称_功能模块名称_逻辑名称/activity 名称_逻辑名称/common_逻辑名称

strings.xml 中,使用 activity 名称注释,将文件内容区分开来

11 layout 中的 id 命名

命名模式为:view 缩写_模块名称_view 的逻辑名称

view 的缩写详情如下:

|

控件

|

缩写

|
|

LayoutView

|

lv

|
|

RelativeView

|

rv

|
|

TextView

|

tv

|
|

Button

|

btn

|
|

ImageButton

|

imgBtn

|
|

ImageView

|

mgView 或则 iv

|
|

CheckBox

|

chk

|
|

RadioButton

|

rdoBtn

|
|

analogClock

|

anaClk

|
|

DigtalClock

|

dgtClk

|
|

DatePicker

|

dtPk

|
|

EditText

|

edtTxt

|
|

TimePicker

|

tmPk

|
|

toggleButton

|

tglBtn

|
|

ProgressBar

|

proBar

|
|

SeekBar

|

skBar

|
|

AutoCompleteTextView

|

autoTxt

|
|

ZoomControls

|

zmCtl

|
|

VideoView

|

vdoVi

|
|

WdbView

|

webVi

|
|

RantingBar

|

ratBar

|
|

Tab

|

tab

|
|

Spinner

|

spn

|
|

Chronometer

|

cmt

|
|

ScollView

|

sclVi

|
|

TextSwitch

|

txtSwt

|
|

ImageSwitch

|

imgSwt

|
|

listView

|

lVi 或则 lv

|
|

ExpandableList

|

epdLt

|
|

MapView

|

mapVi

|

12.activity 中的 view 变量命名

命名模式为:逻辑名称 +view 缩写

建议:如果 layout 文件很复杂,建议将 layout 分成多个模块,每个模块定义一个 moduleViewHolder,其成员变量包含所属 view

13.styles.xml:将 layout 中不断重现的 style 提炼出通用的 style 通用组件,放到 styles.xml 中;

14.使用 layer-list 和 selector

Android 编码规范建议(别人弄的觉得蛮有道理)

1.Java 代码中不出现中文,最多注释中可以出现中文

2.局部变量命名、静态成员变量命名

只能包含字母,单词首字母除第一个外,都为大写,其他字母都为小写

3.常量命名

只能包含字母和_,字母全部大写,单词之间用_隔开

4.图片尽量分拆成多个可重用的图片

5.服务端可以实现的,就不要放在客户端

6.引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大

7.处理应用全局异常和错误,将错误以邮件的形式发送给服务端

8.图片的.9 处理

9.使用静态变量方式实现界面间共享要慎重

10.Log(系统名称模块名称接口名称,详细描述)

11.单元测试(逻辑测试、界面测试)

12.不要重用父类的 handler,对应一个类的 handler 也不应该让其子类用到,否则会导致 message.what 冲突

13.activity 中在一个 View.OnClickListener 中处理所有的逻辑

14.strings.xml 中使用 %1$s 实现字符串的通配

15.如果多个 Activity 中包含共同的 UI 处理,那么可以提炼一个 CommonActivity,把通用部分叫由它来处理,其他 activity 只要继承它即可

16.使用 button+activitgroup 实现 tab 效果时,使用 Button.setSelected(true),确保按钮处于选择状态,并使 activitygroup 的当前 activity 与该 button 对应

17.如果所开发的为通用组件,为避免冲突,将 drawable/layout/menu/values 目录下的文件名增加前缀

18.数据一定要效验,例如

字符型转数字型,如果转换失败一定要有缺省值;

服务端响应数据是否有效判断

** 最后,这些都是一些个人总结和网络上看来的其他网友的建议,**

** 仅供参考,只要形成一个团体上的统一即可,简单知道他的意思就可以了。**

** 程序员养成良好的编码习惯和命名规范,对于自己和整个团队都有好处。 **

  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 67 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 684 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 3 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 428 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 267 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 407 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 449 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 610 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 624 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 462 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 安装

    你若安好,便是晴天。

    128 引用 • 1184 回帖
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 171 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 4 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 181 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 604 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 3 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 221 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    76 引用 • 37 回帖
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    16 引用 • 6 回帖 • 28 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 352 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 56 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖