Android 命名规范

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

命名规范

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

标识符命名法:

  1. 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写。
  2. 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写
  3. 下划线命名法:单词与单词间用下划线做间隔。
  4. 匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型。 量的取名方式为: + + 范围前缀,类型前缀,限定词。

英文缩写规则:

  • 较短的单词可通过去掉“元音”形成缩写
  • 较长的单词可取单词的头几个字母形成缩写
  • 此外还有一些约定成俗的英文单词缩写
    (PS:单词不要用缩写,除非缩写是约定俗成的)
    常见英文单词缩写
英文单词 缩写
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)

包名

包(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,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

类类型 类名
Activity xxxActivity.java
Application xxxApplication.java
Fragment xxxFragment.java
Service xxxService.java
BroadcastReceiver xxxBroReceiver.java
ContentProvider xxxProvider.java
Adapter xxxAdapter.java
Handler xxxHandler.java
接口 xxxInter.java
接口实现类 xxxImpl.java
Persenter xxxPersenter.java
公共父类 BaseActivity.java、BaseFragment.java、- BaseAdapter.java等
util类 LogUtil.java
数据库类 BaseSQLiteDBHelper.java

布局文件名

布局文件类型 布局文件名
Activity activity_xxx.xml(activity+_+去掉后缀的Activity类进行命名)
fragment fragment_xxx.xml(fragment+_+去掉后缀的Fragment类进行命名)
Dialog dialog_描述
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(小驼峰命名法)

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

控件 布局文件中缩写 代码中缩写
LinearLayout xxx_layout xxxLLayout
RelativeLayout xxx_layout xxxRLayout
FrameLayout xxx_layout xxxFLayout
TextView xxx_tv xxxTv
EditText xxx_et xxxEt
Button xxx_btn xxxBtn
ImageView xxx_iv xxxIv
CheckBox xxx_chk xxxChk
RadioButton xxx_rbtn xxxRbtn
ProgressBar xxx_pbar xxxPbar
ListView xxx_lv xxxLv
WebView xxx_wv xxxWv
GridView xxx_gv xxxGv

方法命名

与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的时候他会显示出修改提示,你可以选择也可以自己重新修改,如图:
Android 命名规范_第1张图片
如果现在我们就直接替换的话,就可能把一些不需要替换的给替换了。于是我们再按一遍Shift + F6,就会看到下面这个界面
Android 命名规范_第2张图片
下面两个复选框的意思就是:

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

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

你可能感兴趣的:(Android小技巧,Android)