android命名规范

时间:2022-10-20 13:06:05

Android 开发规范 (陈杨)

(一)注意事项

1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了。

2. 缩进统一为4个空格,将Tab size设置为4则可以保证tab键按4个空格缩进。另外,不要勾选上Use tab character,可以保证切换到不同tab长度的环境时还能继续保持统一的4个空格的缩进样式。

3. 花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。

4. 空格的使用

if、else、for、switch、while等逻辑关键字与后面的语句留一个空格隔开。

5. 空行的使用

将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。在以下情况需用一个空行:

· 两个方法之间

· 方法内的两个逻辑段之间

· 方法内的局部变量和方法的第一条逻辑语句之间

· 常量和变量之间

6. 当一个表达式无法容纳在一行内时,可换行显示,另起的新行用8个空格缩进。

7. 一行声明一个变量,不要一行声明多个变量,这样有利于写注释。

8. 行宽设置为100,设置格式化时自动断行到行宽位置。

9. 使用快捷键进行代码自动格式化。

Windows:CTRL+ALT+L
Mac:OPTION+COMMAND+L

10. 一个方法最多不要超过40行代码。

11. 范围型的常量用枚举类定义,而不要直接用整型或字符,这样可以减少范围值的有效性检查。

12. 文字大小的单位统一用sp,元素大小的单位统一用dp。

13. 应用中的字符串统一在strings.xml中定义,然后在代码和布局文件中引用。

14. 颜色值统一在colors.xml中定义,然后在代码和布局文件中引用。另外,不要在代码和布局文件中引用系统的颜色,除了透明。

(二)命名规范

Java文件命名规范

l Activity (模块名+功能名+Activity)

l Adapter   (模块名+功能名+Adapter)

l 解析类    (Hlr为后缀标识)

l 公共方法  (Tools)

l 数据库    (Db  ,Sp 为后缀标识)

l Service   (Service 为后缀标识)

l BroadcastReceive   (Broadcast 为后缀标识)

l ContentProvider    (Provider为后缀标识)

l 共享基础类(Base开头)

l 实体类 (Model)

l 接口   (以lmpl为后缀)

l AppApplication 定义Application类

l AppConfig      定义配置数据(常量)

资源文件命名规范 (小写)

Layout

l Activity        act_activity所在包的page为中缀_功能名称

l Fragment        fra_所在的activity_功能名称

l Adpter          adpter_功能模块_tem

l Item            item_类型_ /item_adpter_

l Dialog          dlg_

l PopupWindow     ppw_

l Include         include_

l Merge           merge_

l 组合控件        comb_功能

l 动态布局添加    dyn_

res目录下的命名规范(小写)

Drawable

l 图标图片 ico_

l 按钮图片(前缀{_控件}{_范围}{_后缀},控件、范围、后缀可选,但控件和范围至少要有一个)

按压背景   btn_效果(选中效果)   btn_正常效果_normal  btn_点击时的效果_press

常用前缀

默认背景   def_功能_说明

背景       bg_功能_说明

分割特征   div_功能_说明

选择       sel_功能_说明

常用后缀:

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

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

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

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

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

l 绘图 shape

l xml动画(动画类型_动画方向。)

fade_in,淡入

fade_out,淡出

push_down_in,从下方推入

push_down_out,从下方推出

slide_in_from_top,从头部滑动进入

zoom_enter,变形进入

shrink_to_middle,中间缩小

Strings的命名

类型_{范围_}功能,范围可选。以下为几种常用的命名:

l 页面标题,命名格式为:title_页面

l 按钮文字,命名格式为:btn_按钮事件

l 标签文字,命名格式为:label_标签文字

l 选项卡文字,命名格式为:tab_选项卡文字

l 消息框文字,命名格式为:toast_消息

l 编辑框的提示文字,命名格式为:hint_提示信息

l 图片的描述文字,命名格式为:desc_图片文字

l 对话框的文字,命名格式为:dialog_文字

l menu的item文字,命名格式为:action_文字

Colors的命名

前缀{_控件}{_范围}{_后缀},控件、范围、后缀可选,但控件和范围至少要有一个。

l 背景颜色,添加bg前缀

l 文本颜色,添加text前缀

l 分割线颜色,添加div前缀

l 区分状态时,默认状态的颜色,添加normal后缀

l 区分状态时,按下时的颜色,添加pressed后缀

l 区分状态时,选中时的颜色,添加selected后缀

l 区分状态时,不可用时的颜色,添加disable后缀

Style的命名  (单词首字母大写 ,以Style结尾)

参照Drawable的命名方式,以Style结尾

l 控件的命名 控件缩写_{范围_}意义,范围可选,只在有明确定义的范围内才需要加上。

如:  txt_header_title   btn_login

控件

缩写

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

方法的命名

方法

说明

initXX()

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

isXX()

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

getXX()

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

processXX()

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

displayXX()

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

saveXX()

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

resetXX()

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

clearXX()

清除数据相关的

removeXXX()

清除数据相关的

drawXXX()

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

变量

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

常量

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

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

名称

缩写

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.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.数据一定要效验,例如

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

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

快捷键和技巧

参考Google I/O 2015的代码结构,PBF具体可以这样做:

src

└─com

└─domain

└─app

│  Config.java 配置数据、常量

├─framework

│      定义interface以及相关基类

├─io

│      数据定义(model)、数据操作(比如json解析,但不包括db操作)

├─model

│      定义model(数据结构以及getter/setter、compareTo、equals等等,不含复杂操作)

│      以及modelHelper(提供便于操作model的api)

├─provider

│      实现ContentProvider,及其依赖的db操作

├─receiver

│      实现Receiver

├─service

│      实现Service(比如IntentService),用于在独立线程中异步do stuff

├─ui

│      实现自定义view和widget,相关的Adapter也放这里

├─util

│      实现工具类,提供静态方法

├─feature1

│      Item.java                定义model

│      ItemHelper.java          实现modelHelper

│      feature1Activity.java    定义UI

│      feature1DAO.java         私有db操作

│      feature1Utils.java       私有工具函数

│      ...其它私有class

├─...其它feature