1.前言
本文档参考了Google官方Android编码风格规范,尽量形成一个统一的风格,见量知其意就可。
2.源文件基础
2.1 文件名
源文件以其最顶层的类名来命名,大小写敏感,文件扩展名为.java。
2.2 文件编码格式:UTF-8
源文件编码格式为UTF-8
3.源文件结构:按顺序包含以下
3.1 许可证或版权信息
如果一个文件包含许可证或版权信息,那么它应当被放在文件最前面。
3.2 package语句
3.3 import语句
3.3.1 import不要使用通配符
不要出现类似的import语句:import java.util.*;
3.3.2 不要换行
import语句不换行
3.3.3 顺序和间距
import语句可分为以下几组,按照这个顺序,每组由一个空行分隔:
所有的静态导入独立成组
第三方的包,每个顶级包为一组,按字典排序,例如:android, com, junit, org
3.4 类声明
3.4.1 只有一个顶级类
类声明每个顶级类都在一个与它同名的源文件中
3.4.2 类成员顺序
类的成员顺序对易学性有很大的影响,但这也不存在唯一的通用法则,不同的类对成员的排序可能是不一样的。 最重要的是,每个类应该以某种逻辑去排序它的成员,维护者应该要解释这种排序的逻辑。比如:新的方法不能总是习惯性地添加的类的结尾,因为这样是按照时间顺序而非某种逻辑来排序的。
3.4.2.1 区块划分
常量声明区(static final类型数据)
内部接口声明区
UI控件成员变量声明区
普通成员变量声明区
生命周期回调方法区(onCreate(), onResume(), onPause(), onDestroy())
初始化相关方法区
事件响应方法区
普通逻辑方法区
重载的逻辑方法区
内部类声明区
3.4.2.2 类成员排列通用规则
按照发生的先后顺序排列
常量按照使用先后顺序排列
UI控件成员变量按照layout文件中的先后顺序排列
普通成员变量按照使用的先后顺序排列
方法基本上都按照调用的先后顺序在各自区块中排列
相关功能作为小区块放在一起(或者封装掉)
3.4.2.3 重载:永不分离
当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。
4.命名约定
4.1 类名
类名都以UpperCamelCase(驼峰规则)风格编写
类名通常是名词或名词短语,接口名词有时可能是形容词或形容词短语
名词尽量避免缩写,除非该缩写是中所周知的,比如HTML, URL。如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。
安卓相关类命名规则:
类描述例如
Activity类Activity为后缀标识欢迎页面类WelcomeActivity
Fragment类Fragment为后缀标识关于我们AboutFragment
Service类Service为后缀标识
Receiver类Receiver为后缀标识推送接收JPushReceiver
Adapter类Adapter为后缀标识行程列表适配器:TripListAdapter
工具方法类Util或Manager为后缀标识(与系统或第三方的Utils区分)或功能+Util日期格式工具类:DateUtil, 日志工具类:LogUtil
4.2 变量命名规则
在Activity等类中的全局变量均以小写字母m开头(有geter/setter方法的实体类除外),后跟变量的英文描述(采用驼峰规则,如果由多个单词拼接,则每个单词首字母大写),例如:private String mUserName;
在方法中的局部变量,直接以小写字母开头,例如:String userName;
在类中任何地方引用某变量时,能立马区分出该变量是一个全局变量还是局部方法变量
4.3 静态变量、常量命名
字母全部大写,单词之间用”_”分隔开。 例如:public static final String APP_TITLE_TEXT = “app_title”;
4.4 Activity中的UI控件变量的命名
为避免控件和普通成员变量混淆,所有的空间命名军采用如下规则:
m+View缩写(或者全称)+功能名称,例如:
定义一个输入用户名的输入框: EditText mEtUserName;
定义一个输入密码的输入框: EditText mEtPassword;
定义一个等录按钮: Button mBtnLogin;
4.5 layout文件命名规则
Activity中的layout定义:activity_描述.xml,如:activity_register.xml,表示注册界面
Fragment中的layout定义:fragment_描述.xml,如:fragment_register.xml
Dialog中的layout定义:dialog_描述.xml,如:dialog_login.xml,表示登录的对话框
Popup Window中的layout定义:ppw_描述.xml,如:ppw_info.xml
列表项定义:item_描述.xml,例如:item_city.xml
包含项命名:模块_(位置)描述.xml,例如:activity_main_bottom.xml
通用的包含项命名采用:项目名称缩写_描述.xml,例如:hm_header.xml
4.6 资源文件命名规则
用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色
说明:用途也指控件类型(具体见UI控件缩写表) 例如:
btn_main_home.png 按键
divider_maket_white.png 分割线
ic_edit.png 图标
bg_main.png 背景
btn_red.png 红色按键
btn_red_big.png 红色大按键
ic_head_small.png 小头像
bg_input.png输入框背景
divider_white.png白色分割线
sel_edit.xml selector类型的edit图标
名称功能
btn_xx按钮图片使用btn_整体效果(selector)
btn_xx_normal按钮图片使用btn_正常情况效果
btn_xx_pressed按钮图片使用btn_点击时候效果
btn_xx_focusedstate_focused聚焦效果
btn_xx_disabledstate_enabled (false)不可用效果
btn_xx_checkedstate_checked选中效果
btn_xx_selectedstate_selected选中效果
btn_xx_hoveredstate_hovered悬停效果
btn_xx_checkablestate_checkable可选效果
btn_xx_activatedstate_activated激活的
btn_xx_windowfocusedstate_window_focused
bg_head背景图片使用bg功能说明
def_search_cell默认图片使用def功能说明
ic_more_help图标图片使用ic功能说明
seg_list_line具有分隔特征的图片使用seg功能说明
sel_ok选择图标使用sel功能说明
4.7 values中name的命名
类别命名示例
strings使用下划线命名法,规则:
1.模块名+逻辑名称
2.通用字符串以通用英文字符串命名
friend_title: 好友模块标题栏
dialog_title: 弹出框标题
ok: 确定
cancel:取消
colors使用下划线命名法,规则:
1.模块名+逻辑名称
2.颜色
3.多种状态的颜色,以sel为前缀
friend_info_bgfriend_bg: 好友信息背景色
transparent: 透明色
sel_main_btn:包含各种状态的颜色
styles使用驼峰命名法,参照系统定义的styleRectBlueButton
RectBlueButton.Large
4.8 layout文件中的控件id命名
格式为:控件类别型缩写_模块名称_功能简易描述
在登录界面对应的layout文件中,有个输入用户名的输入框,则定义为:
@+id/et_login_username
在注册界面对应的layout文件中,有个提交按钮,则定义为:
@+id/btn_register_submit
在我的好友列表里的ListView,则定义为:
@+id/lv_friends_list
4.9 UI控件缩写表
控件缩写例如
LinearLayoutllmLlLogin
RelativeLayoutrlmRlLogin
FrameLayoutflmFlLogin
TableLayouttlmTlLoing
ButtonbtnmBtnLogin
ImageButtonibtnmIbtLogin
TextViewtvmTvName
EditTextetmEtPwd
ListViewlvmLvFriends
ImageViewivmIvAvatar
GridViewgvmGvPhoto
RecyclerViewrvmRvFriends
ProgressBarpbmPbUpload
SeekBarsbmSbUpload
WebViewwvmWvComm