android的编码习惯
今天大概看了一些别人的写的关于的android设计规范和编码习惯,觉得看了一遍并不是很有用,最好还是记下来吧
文件 java文件
- 文件的编码格式为utf-8;
源文件的结构
- 许可证和版权信息
- package语句
- import语句
- 一个顶级类,和以上的每个部分都用一个空行隔开
注意: import语句不要使用通配符,可以讲引用类的static final 逐一引入
类的声明
以前这块一直不知道这块怎么处理,用android studio 一直追究着代码的排版格式。这里为我提供了一种思路
类成员的顺序
类的成员的顺序,第一次分类以模块区别,比如说view的成员放在一块,静态常量放在一块的,第二次分类,以逻辑和关联性的分类,比如view可以采用自上而下的逻辑去给每个类命名和排版。总之不能用新的成员总是放在类的结尾,这样的其实是按照时间的顺序去放置类的成员的,而不是按照某种逻辑。
区块的划分
- 常量声明区
- UI控件成员变量的声明区
- 普通成员变量声明区
- 内部接口的声明区
- 初始化相关方法区
- 事件响应方法区
- 普通逻辑方法区
- 重载的逻辑方法区
- 发起的异步任务方法区
- 异步任务回调方法区
- 生命周期回调方法区
- 内部类声明区
常量的声明区
- static final 类型的常量 所有单词大写,每个单词以_来连接 public static final
- 全局常量:以g开头,并且依照于驼峰原则 public static
- 公有的非静态的变量: 以p开头,并且依照于驼峰原则 public
- 私有静态常量:以s开头,并且依照于驼峰的原则 private static final
- 私有的非静态的变量:以m开头 private
- 缺省的:不做处理。
//public static final ****public static final ACTION_START = "ACTION_START";// public static ****public static gString ;//public ***public int pCount;// private static final ** private static sInstance;//private ***private int mCount;
内部接口的声明区
比如一些自定义的listener
初始化的相关的方法
以onCreate为主,initView()和initData();
事件响应的方法
bindEvent();
类成员的排列的通用规则
- 按照先后的发生顺序
- 常量按照使用的先后顺序
- ui控件成员变量按章的layout的文件的中的先后顺序
- 普通成员变量按照使用的先后顺序
- 方法按照调用的先后顺序的排列
- 相关功能作为一个小区块放在一起
缩进
4个空格
列的限制
一行不超过80到100行,如果超出,需要自动换行,自动换行的对照的原则,
- 非赋值运算符处断开
- 类云算法的处断开
- 如果非要在赋值运算法断开,则在符号的末尾断开
- 方法名或者构造函数与做括号在同一行
- ,与前面的内容在同一行
- 至少缩进8个字符
垂直空白
一个空白行
1. 类里连续的成员之间:字段,构造函数,方法,嵌套类,静态初始化块,实例初始化块
2. 函数体内,语句的逻辑分组间
3. 类内的第一个成员前或最后一个成员后的空行
4. 多个连续的空行是允许的,但没有必要这样做
5. 同一成员,不同逻辑之间
具体的一些实例
枚举
枚举用逗号分隔
数组
常见的声明的方法常写成块状结构的。
变量的声明
采用第一次使用的时候,采取声明变量,不要的在函数体的开头将所有的变量都声明
另外参考的不要重复或过多声明的临时变量比如
//不要采用下面的for(int i = 0;i < 10;i++){ int j = i;}//尽量改成这样子的int j = -1;for(int i = 0;i < 10;i++){ j = i;}
switch语句
尽量讲default的语句写出,并且当出现fall throug的时候,尽量使用注释,比如
switch(count){ case 4: count--; //do count3 while count = 4; case 3: doCount3(); break; case 2: doCount2(); break; case 1: doCount1(); break; case 0: doCount0(); break; default: break;}
modifiers
当出现多个限定词后,采用public protected private abstract static final transient volatile synchronized native strcitfp
命名的约定
这块我觉得最为重要,毕竟每个人其实的命名规则是不一样,这样的话就会导致代码的易读性存在一些问题,所以我们还是需要采用一些的在命名的规范的
android 整个工程的分包结构
mvc 的结构下
包的名称 | 作用 |
---|---|
ui | 视图层,其中可以fragment/activity等 |
serivce | 整体结构使用的service |
receiver | broadcastReceiver |
adapter | 页面使用adapter |
utils | 工具类 |
helper/compact | 用于实现的协助类或者兼容 |
data/db | 有关数据库的类 |
model | 模型类 |
bean | javabean |
view/widget | 自定义视图类 |
api | 接口层 |
constant | 常量 |
base | 基础的类,常见的有baseActivity,baseFragment等 |
mvp 模式
几本上和mvc差不多
包的名称 | 作用 |
---|---|
api | 接口层 |
widget | 自定义视图层 |
model | 模型层 |
presenter | P层,用于处理activity和fragment的逻辑 |
view | 管理的view层的逻辑的接口,activity去实现 |
service | 服务层 |
receiver | 广播层 |
类名
采用大写的驼峰原则,
类名 | 结尾 |
---|---|
Activity | XXXActivity |
BroadcastReceiver | XXXReceiver |
Service | XXXService |
ContentProvider | Provider |
BaseXXX | BaseXXX |
资源文件的命名规范
layout
- contentview :activity/fragment_类名
- dialog:dialog_描述
- popupwindow:ppw_描述
- 列表:item_描述
drawable
- 用途模块名逻辑名称限定词:用途可以用视图空间的简写,也可以用具体的用途,比如ic,bg_,限定词为_pressed,_small,_normal等
anim
模块名_逻辑名称:fade_in,可以省去模块名字
values
- string :模块名_逻辑名称:friend_title
- colors:模块名逻辑名称颜色;通用的颜色可以采用的颜色作为名字
- styles: 模块名_逻辑名称
layout id
采用 view的简写_view的逻辑名称
常见的ui的变量声明以及id声明
控件 | 缩写 | ui变量的声明 | layout id的声明 |
---|---|---|---|
linearLayout | ll | mFriendLL | ll_friend |
RelativeLayout | rl | mFriendRL | rl_friend |
FrameLayout | fl | mFriendFL | fl_friend |
TableLayout | tl | mFriendTL | tl_friend |
Button | btn | mFriendBtn | btn_friend |
ImageButton | ibtn | mFriendIBtn | ibtn_friend |
ImageView | iv | mFriendIV | iv_friend |
TextView | tv | mFriendTV | tv_friend |
EditText | et | mFriendET | et_friend |
ListView | lv | mFriendLV | lv_friend |
GridView | gv | mFriendGV | gv_friend |
常见的英文的单词,来用来的用途
名称 | 缩写 |
---|---|
icon | ic |
color | cl |
divider | di |
selector | sl |
averager | avg |
background | bg |
buffer | buf |
control | ctrl |
delete | del |
document | doc |
error | err |
escape | esc |
increment | inc |
information | info |
initial | init |
image | img |
length | len |
library | lib |
message | msg |
password | pwd |
server | srv |
string | str |
temp | tmp |
更多相关文章
- 解決在 Android(安卓)中使用 Bitmap 造成 Out of memory 的方法~
- Android朝花夕拾之Debug
- 白话Android自定义ListView实现
- Android(安卓)studio代码混淆
- Android官方推荐全局对象传递数据
- Android(安卓)ID 理解
- Android之HAL粗解
- Android数据类型之间相互转换系统介绍
- mac下Android(安卓)Studio常用的一些快捷键