android接口类命名规范_Android开发规范
分包规范
包名全部小写,连续的单词只是简单地连接起来,不使用下划线。 采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为xxx(公司名),三级包名根据应用进行命名,四级包名为模块名或层级名。 例如:com.longke.qq.activity
com.xxx.activity Activity类
com.xxx.service Service
com.xxx.receiver BroadCastReceiver
com.xxx.provider ContentProvider
com.xxx.base 基类
com.xxx.adapter ViewPager/RecyclerView等适配器
com.xxx.util 各种StringUtil,NetUtil,BitmapUtil等工具类
com.xxx.view 自定义view/第三方开源控件
com.xxx.bean 各种实体类,下面可以再细分VO,PO,DTO
com.xxx.db 数据库操作类
注意:
部分特殊的第三方SDK,比如微信支付,Zxing,讯飞语言等对如果对包位置有特殊要求的,按第三方要求来
MyApplication等全局相关的配置类,放在包名目录下
命名规范
核心原则
见名知意
禁用拼音
标准统一
类
Activity / Fragment / Adapter / Bean...
类名由一个或多个单词组成,采用 大驼峰命名法
同一界面,不同类型的类,前缀必须一样,比如:HomePageActivity,HomePageFragment,HomePageListAdapter...
Listener
Listener接口监听事件的命名规范:以On开头Listener作为后缀。
具体:On+事件描述+Listener
例如:点击事件:OnClickListener
对应的调用方法:setOnClickListener()
常量
常量命名采用 : 全大写 + 下划线方式例如:
public static final int LOGIN_FLAG = 1 ;
intent标记的key以INTENT 开头 , 各个单词以_隔开,例如:
public static final String INTENT_CAR_ID = "intentCarId";
变量
变量以小驼峰式命名法,不同类型的变量又有不同的命名方式.
私有成员变量
必须以"m"开头 + 变量名
例如:
private int mThemeId = 0;
private boolean mIsOpen;
private List mUrlList;
静态成员变量
必须以"s"开头 + 变量名
private static boolean sIsOpen = false;
局部变量
小驼峰命名法
public String getUserName(){
String userName = getUserNameFromDB();
...
}
方法
方法命名规则采用小驼峰命名法例如:
onCreate() / onResume() / onRun()
getXX()返回某个值的方法
initXX() 初始化相关方法,比如初始化布局:initView()
checkXX()和isXX()方法为boolean值的时候使用is或者check为前缀
saveXX() 保存数据
clearXX()和removeXX() 清除数据
updateXX() 更新数据
processXX() 对数据进行处理
dispalyXX() 显示某某信息
对于方法的其他一些规范
方法的参数尽可能不超过4个,多余4个考虑采用builder模式或者JavaBean形式
注意单一职责原则
方法尽量避免返回null,可以考虑抛异常或空数据,比如Collections.emptyList()
类声明规范
区块划分
建议使用注释将源文件分为明显的区块,区块划分如下
常量声明区
UI控件成员变量声明区
普通成员变量声明区
内部接口声明区
初始化相关方法区
事件响应方法区
普通逻辑方法区
重载的逻辑方法区
生命周期回调方法区
内部类声明区
类成员排列通用规则
按照发生的先后顺序排列
常量按照使用先后排列
UI控件成员变量按照layout文件中的先后顺序排列
普通成员变量按照使用的先后顺序排列
方法基本上都按照调用的先后顺序在各自区块中排列
相关功能作为小区块放在一起(或者作为一个封装体引入)
重载方法永不分离,当一个类有多个构造函数,或是多个同名方法,这些函数/方法应该按顺序出现在一起,中间不要放进其它函数/方法。
资源文件命名规范
Activity对应的布局文件命名:XxxActivity--> activity_xxx.xml,比如MainActivity.java--> activity_main.xml
XML中控件命名:控件名_界面名_作用,例如:tv_homepage_name ,et_login_phone
图片命名,资源文件,控件id命名:activity名称+功能名称(背景bg,按钮bt,图片控件iv等)+自己名称
RecyclerView / ListView中的item布局文件命名规范:以item_list作为前缀,以页面名称作为中缀,以列表描述作为后缀。具体:"itemlist"+页面名称+列表描述,例如:item_list_login_users.xml
Dialog布局文件命名规范:以dialog作为前缀,如果是通用的dialog则以common作为中缀以功能描述作为后缀。如果是对应页面定制的dialog,以页面描述作为中缀,dialog描述作为后缀。
具体:
通用的dialog:dialog+common+功能描述,例如dialog_common_hint.xml
指定页面的dialog:dialog+页面名称+功能描述,例如dialog_login_pwd_error.xml
values下文件命名
strings.xml
直接以对应的内容的英文单词组合命名.例如:
购票
景区列表
colors.xml
具体:页面+"_"+描述+颜色名称,例如:
登录页面登录按钮字体颜色
#000000
当然还有一些APP主题色,规范为:common_描述 ,例如:
#33AACC
dimens.xml文件命名
16dp
16dp
drawable目录下资源文件命名规范:
selector文件
以selector作为前缀,以某个页面的作为中缀如果是多个页面就以模块名称作为中缀或者是项目通用的就以common作为中缀,以功能描述作为后缀。
具体:
selector+页面名称+功能描述
selector+模块名称+功能描述
selector+common+功能描述
例如:
登陆页面的确认按钮:selector_login_confirm_btn.xml(login为页面名称)
所有支付模块购买的按钮:selector_pay_buy_btn.xml(buy为模块名称)
所有通用按钮的背景:selector_common_btn_bg.xml
shape图形
以shape 作为前缀,如果是通用的以common作为中缀,如果是单独页面的以页面名称作为中缀,或者以模块名称作为中缀,以功能描述作为后缀。
具体形式和selector一样。
图片资源
图片资源命名规范 全部小写,采用下划线命名法,加前缀区分 命名模式:可加后缀 _small 表示小图, _big 表示大图,逻辑名称可由多个单词加下划线组成,采用以下规则:
用途_模块名_逻辑名称
用途_模块名_颜色
用途_逻辑名称
用途_颜色
icon图片资源以ic开头;
具体: 前缀+""+页面名称+""+描述 (如果页面和描述一致的则不用重复)
欢迎页面背景图 bg_welcome.png
登录页面 登录按钮背景 bg_login_btn.png
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 白色分割线
anim目录
全部小写,采用下划线命名法,加前缀区分。具体动画采用以下规则:
模块名_逻辑名称
逻辑名称
refresh_progress.xml
market_cart_add.xml
market_cart_remove.xml
普通的tween动画采用如下命名方式:
// 前面为动画的类型,后面为方向
动画命名例子 描述
fade_in 淡入
fade_out 淡出
push_down_in 从下方推入
push_down_out 从下方推出
push_left 推向左方
slide_in_from_top 从头部滑动进入
zoom_enter 变形进入
slide_in 滑动进入
shrink_to_middle 中间缩小
代码管理
每完成一个小功能,无论是单个界面的UI,还是某个模块的逻辑,都先本地commit,最后统一push
每天下班之前必须push当天代码
必须确保push到远程仓库的代码是可以正常运行的,不能存在编译错误
使用.gitignore过滤掉自动生成的文件
养成push之前先pull的习惯
技术选型
编程框架标配为 RxJava2.0 + Retrofit2.0 + MVP
架构设计
以下自选:
MVP
MVVM
禁用
MVC
万能Activity
备选开源库
选择开源库时考虑的因素:
低耦合
单一职责
star 和 issue数
维护频率
图片
Glide
Picasso
Fresco
禁用
UIL
Volley
网络
Retrofit + Okhttp
禁用
XUtils
Volley
数据库
GreenDao
Realm
禁用
XUtils
原生Sqlite
事件总线
EventBus
RxBus
如非必须,不用BroadcastReceiver,使用BroadcastReceiver时应用内通信首选LocalBroadcastReceiver.
依赖注入
ButterKnife
Dagger2
禁用
XUtils
手动findViewById
其他
如发现有其他更加优秀的开源库,欢迎讨论,补充
其他注意事项
定义类或者接口 首行留空格,末尾不留;其次每个逻辑分区都要留单行空格(除普通常量定义外)
定义类或者接口变量时,请使用基类或者顶层接口定义变量
自行控制类、接口、及其成员的访问权限,尽量缩小访问权限
类如果不是为扩展而设计的请加final修饰符
遇到switch语句时,酌情考虑将每个case语句拆分成单个函数调用
接口定义不加“I”前缀,实现添加"impl"后缀,如果有必要请提供默认的实现和其它实现 (默认实现:Default+接口名+impl,其它实现 :具体扩展功能 + 接口 + impl)
具有controller功能的类或者接口定义 都以 功能+“manager” 形式定义
所有表示层设计的实体定义形式为 : 功能+“model”
所有列表展示用RecyclerView,禁用ListView
android接口类命名规范_Android开发规范相关推荐
- android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~
写在前面的话 很多刚入行的UI设计师开始接触移动端UI设计的时候,对于基础的界面尺寸规范可能会有一定的模糊认知,导致做出来的界面往往会感觉不是那么和谐,却也不知道怎么去完善和改进. 对于大多数的 ...
- 前端规范 - js开发规范
因为会牵扯到业务逻辑,在实际开发场景中,js开发会占绝大部分,相应的规范细节也比较多 限于篇幅原因,加上有eslint的这个利器,本文只讲一些最最常用的规范 [强制] 开启eslint 开启了esli ...
- android adapter 按钮隐藏 第一个无效_Android开发规范
注释 类/复杂或者不能从方法名字看出意图的方法必须添加注释 /** * @Author: LiuJinYang * @CreateDate: 2020/5/16 9:32 * 网络请求工具类 */pu ...
- php原生开发规范,php开发规范
PHP 开发规范整理 代码样式规范 编码基本规范 a.代码必须遵守 PSR-1. b.文件编码Unicode (UTF-8) 编码保存.同时不要使用 字节序标记(BOM) c.代码必须使用4个空格的缩 ...
- php 实例 规范,PHP开发规范实例详解
本文主要和大家分享PHP开发规范实例详解,希望能帮助到大家. 源文件 代码使用<?php开头 ,忽略闭合标签?> 文件格式必须是无BOM UTF-8格式 一个文件只声明一种类型,如clas ...
- mysql数据库开发规范_开发规范——MYSQL数据库
数据库规范 这里主要针对mysql数据库,其他数据库也可以借鉴 表 1.统一使用表命名规范 表名规范:分层+项目名缩写+实体名(小写)[+下划线+实体名+rel] 例子 表名:bc_user 分层: ...
- golang 命名规范和开发规范
目录 文件命名 package 变量 常量 接口 结构体 方法 注释 README 文件命名 文件命名一律采用小写,不用驼峰式,尽量见名思义,看见文件名就可以知道这个文件下的大概内容. 其中测试文件以 ...
- 物理机存放mysql实例原则_MySQL数据库规范 (设计规范+开发规范+操作规范)
I 文档定义 1.1 编写目的 为了在软件生命周期内规范数据库相关的需求分析.设计.开发.测试.运维工作,便于不同团队之间的沟通协调,以及在相关规范上达成共识,提升相关环节的工作效率和系统的可维护性. ...
- android 开启一个定时线程_ANDROID开发中定时器的3种方法
在android中,经常用到的定时器主要有以下几种实现: 一.采用Handler与线程的sleep(long )方法 二.采用Handler的postDelayed(Runnable, long) 方 ...
- android引用的java包_Android开发中jar包的创建及引用
jar包有两种,一种是纯粹的库功能,没有main入口函数,故无法直接执行:一种是包含main的可执行包! 如有hello/hello.java文件: $ cd hello/$ javac hello. ...
最新文章
- oracle 数据库问题:“ORA-01922: 必须指定 CASCADE 以删除...“,原因及解决办法
- IT经理世界:专注莫如史玉柱
- html5交互效果,浅谈HTML5 CSS3的新交互特性
- go mysql slave_【Golang+mysql】记一次mysql数据库迁移(一)
- 笔记本安装ubuntu后触控板失灵
- python优秀网友学习笔记推荐
- App安全之网络传输安全
- mysql创建操作用户
- 计算机导论python知识点_如何系统地自学 Python?
- 吴恩达《机器学习》 --- 神经网络
- python教程视频哪个好-Python视频教程谁的好
- 拓端tecdat|R语言关联规则模型(Apriori算法)挖掘杂货店的交易数据与交互可视化
- 项目4:抽奖程序 分时间段(按时段设置的奖品数为概率)
- Matlab运行程序_暂停方法
- 在MyEclipse下如何添加hiber…
- mysql通用精确计算年龄方式
- 2020倒计时,大厂核心送给每一个脚踏实地努力着的Android程序员,逆风前行
- 如何用好示波器?资深工程师也会忽略这些细节……
- 【Java习题程序】将int整数转化为int数组,不用转String。
- 最完整的磁性材料行业现状及发展前景分析,长文预警
热门文章
- JDBC链接MySQL数据库
- 2017/12/30 GUI和动态代理
- [hdu4311]Meeting point-1
- 第二次作业:硬币游戏——代码分析与改进
- 【Mac】nsurlsessiond 后台下载问题的解决方法
- [WCF编程]10.操作:请求/应答操作
- 第八章 深度强化学习-Nature深度Q网络(Nature DQN)
- 值得看的youtube频道
- 从零基础入门Tensorflow2.0 ----七、36. 文本生成之---2. 构建模型
- 从零基础入门Tensorflow2.0 ----四、16.tfrecord基础API使用