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

android命名规范的更多相关文章

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

    android文件众多,根据名称来辨别用途很重要,因此命名要规范 这篇文章可参考:Android 命名规范 (提高代码可以读性) 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名 ...

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

    转自:http://blog.csdn.net/vipzjyno1/article/details/23542617 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件 ...

  3. [转] Android 命名规范 (提高代码可以读性)

    Android命名规范编码习惯 刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的 审查和修改过程中就会浪费 ...

  4. Android 命名规范 (转)

    刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间.如果就是我一个人 ...

  5. [旧][Android] 命名规范和编码规范

    备注 原发表于2016.05.07,资料已过时,仅作备份,谨慎参考 前言 本文适用范围:已参加项目开发的人 写这篇文章的目的是为方便地对代码进行管理,让整个团队的代码规范化.这里的部分规定可能和你在其 ...

  6. 第四章 android 命名规范和编码规范

    书里面讲的比较常见,单个人也是有不同的观点: 因为android绝大部分使用java开发的,因此java相关规范适用于android: Google Style: 英文地址:http://google ...

  7. Android命名规范(重点讲解:包名)

    Android程序开发中,使用规范的命名有益于程序的开发和后期阅读.本文主要对Android程序包名的定义做详细介绍,并附带一些简单的命名规则. 一.标识符命名方法1 .小驼峰命名法,除首单词外,其余 ...

  8. Android 命名规范和编码规范

    简明概要  多写注释 一.关于命名规范 对于开发项目来说肯定是要有统一的规范,然而命名规范需要做到哪几点呢? 答: 首先,不能反人类. 再来就是,要望文而知其意. 下面就来说说具体该怎么去规范我们的代 ...

  9. Android命名规范(自定义)

    此规范参考自android源码,并加以改进,仅供个人使用,如果你觉得还有可取之处,可以参考下,以后有好的规则,再补充 总体规范: 类名要清晰,能反映出这个类的作用,最好能达到见名知义的效果 方法名要使 ...

随机推荐

  1. wordpress自定义栏目

    开启自定义栏目:点击头顶的“显示选项”,勾选“自定义栏目” 然后编辑文章时,即可看见 实验: 定义名称为:play_url ,值为:http://www.xiami.com/widget/635357 ...

  2. centos磁盘爆满,查找大文件并清理

    今天发现vps敲入crontab -e 居然提示 “Disk quota exceeded” 无法编辑.于是"df -h"查了查发现系统磁盘空间使用100%了.最后定位到是/var ...

  3. Android 怎样把光标放在EditText中文本的末尾处?

    EditText et = (EditText)findViewById(R.id.inbox); et.setSelection(et.getText().length());

  4. Ajax动态滚动加载数据

    看新浪微博,人人网都有这样的效果:滚动条滚动到最下面的时候,新的数据就被自动加载出来了,今天亲自尝试了一下这个效果的实现. 最开始在CSDN上写了一版,功能比较简单,今天又增加了一个小功能:翻页到指定 ...

  5. 网页爬虫的设计与实现(Java版)

    网页爬虫的设计与实现(Java版)     最近为了练手而且对网页爬虫也挺感兴趣,决定自己写一个网页爬虫程序. 首先看看爬虫都应该有哪些功能. 内容来自(http://www.ibm.com/deve ...

  6. Java I/O操作学习笔记

    书上写的有点乱,所以就自己总结了一下,主要参考:http://www.cnblogs.com/qianbi/p/3378466.html 1.从文件读出和写入: import java.io.*; i ...

  7. [HDOJ2512]一卡通大冒险(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2512 给一个数n,问1~n这n个数内的划分.设dp(i,j)为i划分为j个集合时有多少个. 初始化条件 ...

  8. CVS数据的导入和导出

    2.CSV导入/导出测试 package junit.test; import java.io.File; import java.util.ArrayList; import java.util.L ...

  9. jquery ajax 开发手记

    1.json解析的格式要求更严格了,必须全部加引号,否则无法识别 {"result":"false"} 2.ashx如果要使用Session需要继承接口IReq ...

  10. Win8环境下 IIS6部署MVC网站出现的无法显示此网页错误

    在Win7环境下做好的网站,新的Win8环境发布出现如下图错误: 解决方法如下: 运行: