-
Java类
-
类名:大驼峰命名,所有单词首写字母大写,并且类名最好为名词.
- 正确
public class People{ } public class School{ } public class SchoolModel{ }
- 错误
people,school,schoolmodel
- 常用类命名
- activity类,以Activity为后缀
- fragment类,以Fragment为后缀
- service类,以Service后缀
- adapter类,以Adapter为后缀
- 工具类,以Util为后缀
- 实体类,命名以实际含义
- 接口,以I为前缀(后续补充callback等命名)
-
包名:全部单词小写用"."连接单词,不使⽤用下划线链接,
- 正确:
com.login.login, com.login.password
- 错误
com_login_login com_login_password
-
局部变量:采用小驼峰,第一个单词手写字母小写后面单词首写字母都大写
- 正确
People people=new People(); Man man=new Man();
- 错误
People People=new People(); Man Man=new Man();
-
全局变量:依然采用小驼峰命名,但是有些小的区别,第一个字母必须为小写m后面加相应的单词(依据Android源码编写)
- 正确
public People mPeople; public Man mMan;
- 错误
public People people; public Man Man;
-
PS:实体类中的成员变量不做m+限制,采用小驼峰命名规范,单词拼接使用"_",如:
public String year; public String name_count; public String school;
后续补充全局boolean变量的命名
- 常量命名:单词所有字母大写,并用下划线拼接单词,
- 正确```` public static final String CONSTANT_CASE="constant_case"; public static final int COUNTRY_CHINA=124; ````
-
错误
public static final String CONSTANT_case="constant_case"; public static final int COUNTRY_china=124;
-
常用常量定义规范:
intent filter相关常量
- action:INTENT_ACTION_功能
- category:INTENT_CATEGORY_功能
- 字符串定义规范:"包名+功能(大驼峰)",如:"com.example.action.TIMETRAVEL"-
组件之间数据传递的键值
- EXTRA_功能,确保将应用的软件包名称作为前缀,如:
public static final String EXTRA_GIGAWATTS ="com.example.EXTRA_GIGAWATTS";
-
用于startActivityForResult()和setResult的code常量:
- REQUEST_CODE_功能
- RESULT_CODE_功能- 常量位置定义规则:
- 只限于当前类使用的常量,定义在当前类即可
- 公共常量放在公共常量类
- 常量位置定义规则:
-
方法命名:小驼峰,且尽量动词开头
- 正确
public void login(); public void getHome(); public void isLogin();
- 错误
public void Login(); public void GetHome();
- 常用方法命名
- 初始化方法,命名以init开头,如initView()
- 按钮点击方法
- 设置方法,以set开头,如setData()
- 具有返回值的获取方法,以get开头,如getData();
- 通过异步加载数据的方法,以laod开头,如loadData();
- 布尔的判断,命名以is或has开头,如isCheck();
-
方法参数命名:小驼峰命名,如
public void login(String username,String password); public void isLogin(String loginName);
-
命名规则:
-
控件命名:
- 全局:m+功能+View
- 局部:功能+View;
- 如:
public Button mLoginView; public LinearLayout mLoginContainView;
- ps:不采用:m+功能名+控件缩写,功能+控件缩写,的原因主要考虑很多控件缩写重复,并且每添加一个自定义控件就需要定义一个控件缩写很痛苦。特别是当一个控件为Button loginBtn ,当需求变更需要使用TextView,很多时候会忘修改修改缩写。
其他对象命名按照:全局变量和局部变量
-
-
-
Class 内部顺序和逻辑
每个 class 都应该按照一定的逻辑结构来排列基成员变量、方法、内部类等,从而达到良好的可读性。
总体上来说,要按照先 public, 后 protected, 最后 private, 函数的排布也应该有一个逻辑的先后顺序,由重到轻。
-
以下顺序可供参考:
- 定义TAG,一般为 private(可选)
- 定义 public 常量
- 定义 protected 常量、内部类
- 定义 private 变量
- 定义 public 方法
- 定义 protected 方法
- 定义 private 方法
资源文件命名:
-
图片命名: 单词全部小写,用""拼接,命名规则:前缀名名字,前缀名名字状态(后缀) 且图片统一放在mipmap相对应的位置,
-
如:
bg_main.png、ic_search_press.png
前缀,后缀表格
-
前缀 | 说明 |
---|---|
ic | icon 主要用于布局和子布局的图标 |
bg | background 主要用于布局和子布局的背景 |
div | divider 主要用于分隔线,不仅包括Listview中的还包括普通布局中的线 |
后缀 | 说明 |
---|---|
不加 | 图片的状态,代表普通状态 |
pressed | 图片的状态,代表按下状态 |
selected | 图片的状态,代表其所占的view被选中 |
disable | 图片的状态,代表其所占的view没有被选中 |
-
布局文件命名:单词全部小写,采用"_"拼接,
Activity 的 layout 以 module_activity 开头
Fragment 的 layout 以 module_fragment 开头
Dialog 的 layout 以 module_dialog 开头
include 的 layout 以 module_include 开头
ListView 的行 layout 以 module_list_item 开头
RecyclerView 的 item layout 以 module_recycle_item 开头
GridView 的行 layout 以 module_grid_item 开头
PopupWindow的layout以module_ppw开头
include的layout以module_include开头
stubview的layout以module_stubview开头
merge的layout以module_merge开头
menu的layout以module_menu开头 控件id命名:module_功能,
id=login_cancel
- string资源文件命名:不要跟title、dialog、button等东西关系起来,全部写入 module_strings.xml 文件中, 字符串以小写单词+下划线的方式命名,采用以下规则:
模块名_逻辑名称
如:moudule_login_tips,module_homepage_notice_desc
- colors资源使用#AARRGGBB 格式写入 module_colors.xml 文件中命名规则:
模块名_逻辑名称_颜色
<color name="module_btn_bg_color">#33b5e5e5</color>
- style 资源采用小写单词+下划线方式命名,写入 module_styles.xml 文件中, 采用以下规则:
父 style 名称.当前 style 名称
<style name="ParentTheme.ThisActivityTheme">
...
</style>
-
themes.xml
- 命名:大驼峰,首单词字母大写,也可以用"."拼接,如以下两种写法都是规范的```` <style name="BaseActionBarTheme" parent="ThemeOverlay.AppCompat.ActionBar" /> <!-- app 通用actionbar主题--> <style name="AppActionBarTheme" parent="BaseActionBarTheme"> <item name="actionMenuTextAppearance">@style/ActionMenuText</item> <item name="actionMenuTextColor">@color/colorPrimaryText</item> </style> ````
dimen 资源以小写单词+下划线方式命名,写入 module_dimens.xml 文件中, 采用以下规则:
模块名_描述信息
<dimen name="module_horizontal_line_height">1dp</dimen>
- anim 资源名称,命名规则:
模块名_逻辑名称_[方向|序号]
tween 动画资源:尽可能以通用的动画名称命名,如 module_fade_in ,
module_fade_out , module_push_down_in (动画+方向);
frame 动画资源:尽可能以模 块+功能命名+序号。如:module_loading_grey_001
- xml文件下
- perference配置文件,功能_preferences.xml
- drawable资源名称:
模块名_业务功能描述_控件描述_控件状态限定词
如:module_login_btn_pressed,module_tabs_icon_home_normal
- 细节规范
文件编码:源文件编码格式为UTF-8。
import不要使用通配符, 即,不要出现类似这样的import语句:import java.util.*;
重载:永不分离当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。
-
判断语句:
- if, else, for, do, while语句一定要附带大括号如:
if(XXX){ }else{ }
- 错误示例:
If xxxx Else xxxx
- 每次只声明一个变量,不要使用组合声明,比如
````
错误 int year, name;
正确 int year;
int name;
````
- switch块内 default的情况要写出来,每个switch语句都包含一个default语句组,即使它什么代码也不包含。
- 方法参数个数最多7个(构造函数尽量限制7个或者使用Builder模式)
- 待讨论
- 一行代码或者注释限制为80到100字符,任何一行如果超过这个字符数限制,必须自动换行
- 一个方法不能超过一屏,超过一屏则分解为多个方法
-
注释规范
-
类注释:每个类必须说明这个类是做什么的,不用写作者名(让每个人都可以修改这个类,避免添加其他人添加功能找原作者)
/** * to do something? */ public class AppActivity extends BaseActivity {}
-
方法注释:
/** * *@param key 键值 *@param mObject 对象 *@return 返回值 */ public String getName(String key,Object object){}
-
常量注释:
/** * inten跳转指定值 */ public static final int INTENT_APP=1001;
-
实参注释(视具体情况添加)
getName(key/*实参注释*/)
-
-
接口定义方法,每个方法必须加注释
- 注意事项注释
- TODO 使用TODO来标记代码,说明标识处有功能代码待编写
- FIXME 使用FIXME来标记代码,说明标识处代码需要修正,甚至代码是 错误的,不能工作,需要修复
- XXX 使用XXX来标记代码,说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进
- 注意事项注释
-
参考资料