规则:包名全部小写,采用反域名命名规则,一级包名是顶级域名,通常为com, edu, gov, net, org等,二级包名,通过为公司名或部门名或者个人名,三级包名通常为项目名,四级包名为模块名或者层级名。以下是从层级包名来划分android项目中采用的模块分包
com.shanghaibirkin.xxxx.ui//所有用户界面 home代表首页模块,main代表主界面模块,person代表用户信息模块,trade代表交易模块,wealth代表我的财富模块.
com.shanghaibirkin.xxxx.ui.person//用户模块
com.shanghaibirkin.xxxx.ui.person.activity//用户模块的activity
com.shanghaibirkin.xxxx.ui.person.adapter//仅用户模块的适配器
com.shanghaibirkin.xxxx.ui.person.entity//仅用户模块的实体类模块
com.shanghaibirkin.xxxx.ui.person.fragment//仅用户模块的fragment模块
com.shanghaibirkin.xxxx.ui.person.hepler//仅用户模块的工具类
com.shanghaibirkin.xxxx.ui.person.inter//仅用户模块的接口
com.shanghaibirkin.xxxx.ui.person.widget//仅用户模块的自定义控件
com.shanghaibirkin.xxxx.base//项目中的基类
com.shanghaibirkin.xxxx.library//项目中用到的开源库
com.shanghaibirkin.xxxx.widget//所有模块都能用到的自定义的View类
com.shanghaibirkin.xxxx.util//所有模块常用的公共工具类(网络, IO, 日志等)
2.资源文件分包
配置我们的app文件夹下的build.gradle文件
如我的
//资源分包
sourceSets {
main {
jniLibs.srcDirs = ['libs']
res.srcDirs =
[
'src/main/res',
'src/main/res/layouts',
'src/main/res/layouts/main',
'src/main/res/layouts/home',
'src/main/res/layouts/wealth',
'src/main/res/layouts/person',
'src/main/res/layouts/trade'
]
}
}
配置完之后,sync project一下就成功了,项目结构就变成了这样,就可以对应上面的模块分包
文件夹是要自己创建的,因为自己创建的文件夹gradle不能解析为资源文件来使用,所以需要在build.gradle中进行配置
规则:采用大驼峰式命名法,首字母大写,尽量避免缩写,除非该缩写是众所周知的,比如HTML,URL,如果类名称包含单词缩写,则单词缩写的每个字母均应大写。以下列举的是android中几种最为常用的类的命名。
classLoginActivity;//activity类classDiscoverFragment;//fragment类classAnalysisService;//service类classWakeupRankAdapter;//adapter类classStringUtils;//工具类classUserBean;//模型类classApiImpl;//接口实现类
规则:命名规则与类命名一样采用大驼峰式命名法,首字母大写,多以able, ible, er结尾
interfaceComparable;interfaceAccessible;interfaceOnClickListener;
规则:采用小驼峰命名法,首字母小写,方法名采用动词或动名词结构。方法的命名应该与方法的真正行为具有对应关系,下面给出一些方法名的动词前缀标示的建议。
方法名描述
getXX()获取某个属性的返回值
setXX()设置某个属性值
initXX()初始化方法,如初始化布局initView()
isXX()判断是否true的方法;
checkXX()与isXX意义等价
processXX()处理数据
updateXX()更新数据
saveXX()保存数据
addXX()添加数据
deleteXX()删除数据
resetXX()重置数据
clearXX()清除数据
removeXX()移除数据或者视图等,如removeView();
drawXX()绘制数据或者视图
规则:采用小驼峰命名法,首字母小写。变量名应简短且能描述其用途,尽量避免拼音,无意义地缩写。除非是临时变量,否则不建议使用单个字符的变量名,如i, j, k。对于变量命名,还有一种风格是google的以字母m为前缀(m为member缩写),在android 源码中随处可见。
privateintuserName;//java的一般性风格privateintmUserName;//google的成员变量风格,m为member的缩写
规则:常量使用全大写字母加下划线的方式命名。
publicstaticfinalintTAG="tag";publicstaticfinalintSTART_CLASS_NOT_FOUND = -2;
规则:首先需要满足第5条变量的规则,
模式:逻辑名 + view缩写
ButtonsendNewsBtn;TextViewpasswordTxt;
规则:view缩写_模块名_逻辑名
android:id="@+id/btn_news_send"//样例
view缩写如下:
View缩写
TextView tv
EditText edt
Button btn
ImageButton ibtn
ImageView img
ListView lv
RadioGroupr rgp
RadioButton rbtn
ProgressBar pb
SeekBar sb
CheckBox cbx
Spinner spn
TableLayout tbl
TableRow tbr
LinearLayout ll
RelativeLayout rl
ScrollView scll
SearchView sv
TabHost tbh
TabWidget tvg
10. 资源文件名
规则:全部小写,采用下划线命名法。layout文件命名:组件类型_{模块_}功能.xml
activity_news_title.xml//样例
命名规范组件类型
activity_{模块_}功能Activity命名格式
fragment_{模块_}功能Fragment命名格式
dialog_{模块_}功能Dialog命名格式
popup_{模块_}功能PopupWindow命名格式
item_list_{模块_}功能ListView的item命名格式
item_grid_{模块_}功能GridView的item命名格式
模式:前缀{_控件}{_范围}{_后缀},控件、范围、后缀可选
bg_login_pressed.png//样例
区分状态时,默认状态添加normal后缀
区分状态时,按下时的状态添加pressed后缀
区分状态时,选中时的状态添加selected后缀
区分状态时,不可用时的状态添加disable后缀
多种状态的添加selector后缀
mipmap命名细则
图标类添加ic前缀
背景类添加bg前缀
分隔类添加div前缀
默认类添加def前缀
规则:{范围_}动画类型_动画方向。
login_fade_in.xml//样例
动画命名描述
fade_in淡入
fade_out淡出
push_down_in从下方推入
push_down_out从下方推出
slide_in_from_top从头部滑动进入
zoom_enter变形进入
shrink_to_middle中间缩小
模式:activity名_{范围_}逻辑名
用户名//样例
模式:前缀{_控件}{_范围}{_后缀}, 控件、范围、后缀可选,
#FFFFFF//样例
colors命名细则
背景颜色添加bg前缀
文本颜色添加text前缀
分割线颜色添加div前缀
区分状态时,默认状态的颜色添加normal后缀
区分状态时,按下时的颜色添加pressed后缀
区分状态时,选中时的颜色添加selected后缀
区分状态时,不可用时的颜色添加disable后缀
不要直接忽略Exceptions
例如下面的示例,永远不要这样做,无法预测未来可能的变化
voidsetServerPort(Stringvalue){try{ serverPort = Integer.parseInt(value); }catch(NumberFormatException e) { } }
正确的做法应该如下:
voidsetServerPort(Stringvalue) throws ConfigurationException{try{ serverPort = Integer.parseInt(value); }catch(NumberFormatException e) {thrownewConfigurationException("Port "+value+" is not valid."); } }
import采用完全限定名
不提倡:
importfoo.*;
正确做法:
importfoo.Bar;
括号风格:
不提倡:
if(condition) body();
正确做法:
if(condition) { body(); }
使用空格来缩进
使用4个空格缩进来代表块,而绝不使用tab键;
使用8个空格来代表行包裹,包括函数调用。
1.类注释
每个类完成后应该有作者姓名和联系方式的注释,对自己的代码负责
/**
作者: nieshun
时间:
描述: 用户登录
联系方式:
*/
public class Login{
…
}
2.方法注释
每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释
/*
方法名:
功 能:
参 数:
返回值:无
*/
3.快注释
private class MessageObserver extends ContentObserver {
public MessageObserver() {
super(mainHandler);
}
publicvoidonChange(booleanhasChanged){// 发送更新UI的消息mHandler.sendMessage(mHandler.obtainMessage(0x2)); } }
4.资源文件注释
#FF0000
#0079FF