【朝花夕拾】Android编码风格篇
结合51CTO学院中张凌华老师讲的编码风格课程,对自己平时工作中的形成的一些编码风格做一些总结。
一. 项目开发目录命名:
Requirement - 需求相关文档
Design - 设计
Planning&Log - 计划,日志,会议
Test -测试相关
Study - 学习资料,demo等
Deployment - 发布,部署,publish
Src/Source -源代码及单元测试
二. 四种命名法则
Pascal命名法:如MyName,首字母大写,又称大驼峰命名法
驼峰命名法:如myName,首字母小写
下划线命名法:如my_Name,单词之间用下划线分开
匈牙利命名法:如strMyName,前缀表示该变量的类型
三. 常量一般都用下划线命名,如MY_NAME
静态变量用s打头,如sMyName
全局变量用m打头,如mMyName
循环用的变变量,一般用i,j,k等无意义的变量
函数内的局部变量一般如_myName(张凌华老师的习惯)
函数的形参一般如pMyName(张凌华老师的习惯)
四. 以下是从某个网站转载的 http://blog.csdn.net/vipzjyno1/article/details/23542617
个人觉得标识符命名原则:尽可能的用最少的字符而又能完整的表达标识符的含义。
英文缩写原则:
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 |
|
数据库类 |
以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 编码风格规范,很赞哦
1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...
- Android编码风格
整理一下51CTO学院中张凌华老师讲的编码风格课程 一. 项目开发目录命名: Requirement - 需求相关文档 Design - 设计 Planning&Log - 计划,日志,会议 ...
- 最详细最权威的Android 编码规范
1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...
- 最全面的 Android 编码规范指南
最全面的 Android 编码规范指南 本文word文档下载地址:http://pan.baidu.com/s/1bXT75O 1. 前言 这份文档参考了 Google Java 编程风格规范和 Go ...
- 【转载】Android Metro风格的Launcher开发系列第二篇
前言: 各位小伙伴们请原谅我隔了这么久才开始写这一系列的第二篇博客,没办法忙新产品发布,好了废话不说了,先回顾一下:在我的上一篇博客Android Metro风格的Launcher开发系列第一篇写了如 ...
- Android Metro风格的Launcher开发系列第三篇
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
- 【朝花夕拾】Android自定义View篇之(八)多点触控(上)MotionEvent简介
前言 在前面的文章中,介绍了不少触摸相关的知识,但都是基于单点触控的,即一次只用一根手指.但是在实际使用App中,常常是多根手指同时操作,这就需要用到多点触控相关的知识了.多点触控是在Android2 ...
- 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象
前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...
- Nim编码风格
介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考. 但值得注意的是,有很多例外 ...
随机推荐
- 与下位机或设备的通信解析优化的一点功能:T4+动态编译
去年接触的一个项目中,需要通过TCP与设备进行对接的,传的是Modbus协议的数据,然后后台需要可以动态配置协议解析的方式,即寄存器的解析方式,,配置信息有:Key,数据Index,源数据类型 ...
- linux 使用技巧 screen 管理你的远程桌面的会话创建和使用
下面介绍 screen 使用的技巧教你管理远程会话 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份. ftp 传 ...
- mongodb 数据导出
后台找我导数据 以此记录 在mongodb bin目录下执行 ./mongoexport -d xxx(db name)-c xxx(Collection name)-u xxx(username) ...
- 编译部署 Mysql 5.7
1.环境准备 RHEL7.4(最小化安装) 64bit 2G 内存 (1G 内存编译将近一个小时) 磁盘空间 15G 以上. 配置为本地yum 源 从MySQL5.7版本开始,安装MySQL需要 ...
- maven 禁止连接外网仓库
有些内网机器不能连外网的情况下,因为依赖的项目pom配置问题,mvn package时仍会尝试请求外网的repo(比如默认中央repo或oss). 此时配置 settings.xml 为自己内网rep ...
- imagecreatefrombmp、imagebmp php处理bmp文件
/*格式组成典型的BMP图像文件由四部分组成: 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及定义颜色等信息: ...
- vuex学习
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 简单的理解就是你在state中定义了一个数 ...
- ChartControl设置坐标轴范围
需求:有一条坐标轴是用来表示百分比的,所以刻度范围只能是从0 - 100: 解决方法:运行chatcontrol设计器,选中需要设置的轴,如下图: 设置Whole range 的最大最小值: 默认情况 ...
- framework7 入门(数据获取和传递)
数据获取 framework7自带request方法 , var app = new Framework7({...});app.request(parameters) 或者 Framework7.r ...
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...