android的编码习惯

今天大概看了一些别人的写的关于的android设计规范和编码习惯,觉得看了一遍并不是很有用,最好还是记下来吧

文件 java文件

  • 文件的编码格式为utf-8;

源文件的结构

  1. 许可证和版权信息
  2. package语句
  3. import语句
  4. 一个顶级类,和以上的每个部分都用一个空行隔开
    注意: import语句不要使用通配符,可以讲引用类的static final 逐一引入

类的声明

以前这块一直不知道这块怎么处理,用android studio 一直追究着代码的排版格式。这里为我提供了一种思路

类成员的顺序

类的成员的顺序,第一次分类以模块区别,比如说view的成员放在一块,静态常量放在一块的,第二次分类,以逻辑和关联性的分类,比如view可以采用自上而下的逻辑去给每个类命名和排版。总之不能用新的成员总是放在类的结尾,这样的其实是按照时间的顺序去放置类的成员的,而不是按照某种逻辑。

区块的划分

  1. 常量声明区
  2. UI控件成员变量的声明区
  3. 普通成员变量声明区
  4. 内部接口的声明区
  5. 初始化相关方法区
  6. 事件响应方法区
  7. 普通逻辑方法区
  8. 重载的逻辑方法区
  9. 发起的异步任务方法区
  10. 异步任务回调方法区
  11. 生命周期回调方法区
  12. 内部类声明区

常量的声明区

  • 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();

类成员的排列的通用规则

  1. 按照先后的发生顺序
  2. 常量按照使用的先后顺序
  3. ui控件成员变量按章的layout的文件的中的先后顺序
  4. 普通成员变量按照使用的先后顺序
  5. 方法按照调用的先后顺序的排列
  6. 相关功能作为一个小区块放在一起

缩进

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
receiverbroadcastReceiver
adapter页面使用adapter
utils工具类
helper/compact用于实现的协助类或者兼容
data/db有关数据库的类
model模型类
beanjavabean
view/widget自定义视图类
api接口层
constant常量
base基础的类,常见的有baseActivity,baseFragment等

mvp 模式

几本上和mvc差不多

包的名称作用
api接口层
widget自定义视图层
model模型层
presenterP层,用于处理activity和fragment的逻辑
view管理的view层的逻辑的接口,activity去实现
service服务层
receiver广播层

类名

采用大写的驼峰原则,

类名结尾
ActivityXXXActivity
BroadcastReceiverXXXReceiver
ServiceXXXService
ContentProviderProvider
BaseXXXBaseXXX

资源文件的命名规范

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的声明
linearLayoutllmFriendLLll_friend
RelativeLayoutrlmFriendRLrl_friend
FrameLayoutflmFriendFLfl_friend
TableLayouttlmFriendTLtl_friend
ButtonbtnmFriendBtnbtn_friend
ImageButtonibtnmFriendIBtnibtn_friend
ImageViewivmFriendIViv_friend
TextViewtvmFriendTVtv_friend
EditTextetmFriendETet_friend
ListViewlvmFriendLVlv_friend
GridViewgvmFriendGVgv_friend

常见的英文的单词,来用来的用途

名称缩写
iconic
colorcl
dividerdi
selectorsl
averageravg
backgroundbg
bufferbuf
controlctrl
deletedel
documentdoc
errorerr
escapeesc
incrementinc
informationinfo
initialinit
imageimg
lengthlen
librarylib
messagemsg
passwordpwd
serversrv
stringstr
temptmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值