Android 命名规范

之前写Demo的时候,因为代码量比较小,对于命名规范没有什么概念,直到我现在完成了这个APP以后我就发现命名规范的重要性,因为APP的代码量和原来的小Demo不是一个级别的,并且APP存在很多问题,我去问学长,学长说我的代码看起来比较费劲,然后学长就希望我能学习一下代码规范,但是因为之前已经完成了一部分了,不好中途修改,到现在的测试阶段我才开始修改项目中的一些命名规范,我在修改的过程中遇到了很多非命名的问题,正好借这个博客总结一下。
(PS:我的项目GitHub地址:戳这里希望能有大佬能给我一点建议

命名规范

说命名规范之前,先主要说下当前主要的标识符命名法以及英文缩写规则

标识符命名法:
  1. 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。
  2. 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写
  3. 下划线命名法:单词与单词间用下划线做间隔。
  4. 匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型。 量的取名方式为:<scope_> + <prefix_> + <qualifier>范围前缀,类型前缀,限定词。
英文缩写规则:
  • 较短的单词可通过去掉“元音”形成缩写
  • 较长的单词可取单词的头几个字母形成缩写
  • 此外还有一些约定成俗的英文单词缩写
    (PS:单词不要用缩写,除非缩写是约定俗成的)
    常见英文单词缩写
英文单词缩写
iconic (主要用在app的图标)
colorcl(主要用于颜色值)
dividerdi(主要用于分隔线,不仅包括Listview中的divider,还包括普通布局中的线)
selectorsl(主要用于某一view多种状态,不仅包括Listview中的selector,还包括按钮的selector)
averageavg
backgroundBg(主要用于布局和子布局的背景)
bufferbuf
controlctrl
deletedel
documentdoc
errorerr
escapeesc
incrementinc
infomationinfo
initialinit
imageimg
InternationalizationI18N
lengthlen
librarylib
messagemsg
passwordpwd
positionpos
serversrv
stringstr
temptmp
windowwnd(win)
包名

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

包类型包名
自定义view 或者是View接口com.xxx.xxx.view
activity类com.xxx.xxx.activities
fragment类com.xxx.xxx.fragments
适配器相关com.xxx.xxx.adapter
公共工具类com.xxx.xxx.utils
实体类com.xxx.xxx.bean
service服务com.xxx.xxx.service
广播接收器com.xxx.xxx.broadcast
数据库操作类com.xxx.xxx.db
中间对象com.xxx.xxx.persenter
数据处理类com.xxx.xxx.model
类名

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

类类型类名
ActivityxxxActivity.java
ApplicationxxxApplication.java
FragmentxxxFragment.java
ServicexxxService.java
BroadcastReceiverxxxBroReceiver.java
ContentProviderxxxProvider.java
AdapterxxxAdapter.java
HandlerxxxHandler.java
接口xxxInter.java
接口实现类xxxImpl.java
PersenterxxxPersenter.java
公共父类BaseActivity.java、BaseFragment.java、- BaseAdapter.java等
util类LogUtil.java
数据库类BaseSQLiteDBHelper.java
布局文件名
布局文件类型布局文件名
Activityactivity_xxx.xml(activity+_+去掉后缀的Activity类进行命名)
fragmentfragment_xxx.xml(fragment+_+去掉后缀的Fragment类进行命名)
Dialogdialog_描述
PopupWindow命名ppw_描述.xml
列表项命名listitem_描述.xml
包含项命名include_模块.xml
adapter的子布局命名功能模块_item.xml
资源文件名

资源文件的命名规则主要是下划线命名法,通常第一个单词是作用的控件或者功能的缩写

名称功能
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_功能_说明
变量名/常量名
变量类型变量名
成员变量mFileName(m+大驼峰命名法)
静态变量sInstance(s+大驼峰命名法)
常量TYPE_COURSE
局部变量myName(小驼峰命名法)

对于控件的命名,很多人是建议采用【控件缩写】+【控件逻辑名称】的方式,但是你也可以使用【控件逻辑名称】+【控件缩写】的方式,下面是控件的缩写

控件布局文件中缩写代码中缩写
LinearLayoutxxx_layoutxxxLLayout
RelativeLayoutxxx_layoutxxxRLayout
FrameLayoutxxx_layoutxxxFLayout
TextViewxxx_tvxxxTv
EditTextxxx_etxxxEt
Buttonxxx_btnxxxBtn
ImageViewxxx_ivxxxIv
CheckBoxxxx_chkxxxChk
RadioButtonxxx_rbtnxxxRbtn
ProgressBarxxx_pbarxxxPbar
ListViewxxx_lvxxxLv
WebViewxxx_wvxxxWv
GridViewxxx_gvxxxGv
方法命名

与java开发类似,采用小驼峰命名规则。首单词首字母小写,其余单词首字母大写。尽量不要使用下划线。

方法类型方法名
initXX()初始化相关方法,使用init为前缀标识,如初始化布局initView()
isXX()checkXX()方法返回值为boolean型的请使用is或check为前缀标识
getXX()返回某个值的方法,使用get为前缀标识
processXX()对数据进行处理的方法,尽量使用process为前缀标识
displayXX()弹出提示框和提示信息,使用display为前缀标识
saveXX()与保存数据相关的,使用sav为e前缀标识
resetXX()对数据重组的,使用reset前缀标识
clearXX()清除数据相关的
removeXXX()清除数据相关的
drawXXX()绘制数据或效果相关的,使用draw前缀标识
drawable目录下的命名
类型命名
按钮图片使用(selector)btn_xx (btn_整体效果)
按钮图片使用(平常情况)btn_xx_normal(btn_效果_normal)
按钮图片使用(点击情况)btn_xx_press(btn_效果_press)
背景图片使用bg_xx(bg_功能_说明 )
默认图片使用def_xx(def_功能_说明 )
图标图片使用icon_xx (icon_功能_说明)
具有分隔特征的图片使用seg_xx (seg_功能_说明)
选择图标使用sel_xx (sel_功能_说明)

修改时遇到的麻烦

如果你一开始写app的时候就很注意命名规范的话,就不会遇到这一错误,但是如果是中途开始规范的话,我们需要把命名给Rename。
Android Studio提供了强大的重构功能,可能很多人就会直接进行Rename或者是Shift + F6
注意这样就会照成很多没有必要的修改,比如你选择了字符串匹配替换的话,很多字符串中相同的也会被替换,这样就造成了意义改变了。
所以进行修改就有两种情况

  1. 要保证全部改名。无论要改名的是变量、字段、方法、类还是包, 这些变量、字段、方法、类、包可能已经在整个程序的多处被引用了,所以要改名必须在所有的地方全部修改,不能遗漏。
  2. 要做有意义的修改,不能无脑似地见了和要改名的字符串一样的字符串就改。

可能第一种情况全部替换就好了(但是如果有包含一部分的就会把这一段进行替换,可能就会改变意思了,所以最好还是要使用Rename功能),但是第二种情况,我们使用Rename的时候也不能盲目的按Enter,因为这样的话我们也全部替换了,所以我们要改变一些选项,来改变更改的目标:
当我们按Shift + F6的时候他会显示出修改提示,你可以选择也可以自己重新修改,如图:
这里写图片描述
如果现在我们就直接替换的话,就可能把一些不需要替换的给替换了。于是我们再按一遍Shift + F6,就会看到下面这个界面
这里写图片描述
下面两个复选框的意思就是:

  • 第一个是Sesrch in comments and strings, 意思是在注释和文本字符串里搜索。 如果选择了这个选项,那么所有在注释和文本字符串里出现的sVar都会被包括进来修改。
  • 第二个是Search for text occurrences, 意思是在字面意义上的搜索。 这个选项没有什么用,因为 Shift + F6 实际上是一个代码重构的快捷键,不是做文本替换的命令。所以选不选这个选项都不起作用。

所以我们根据我们的需要将复选框进行修改然后再进行替换就好了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值