Android开发规范自用简单版

一、命名规范

1. 项目名

(1) App 项目以产品对应英文命名,例:

教学中⼼ TeachingCenter

(2) 模块以 模块名 命名,例:

公共模块 common
用户模块 user

(3) 组件以 library- + 组件 命名,例:

公共组件 library-common
日历组件 library-calendar

2. 类名

采⽤⼤驼峰命名规范,尽量避免缩写,除非该缩写是众所周知的, 比如 URL,如果类名称中包含单词缩写,则单词缩写的每个字母均应大写。

描述 例如
Activity Activity 为后缀标识 欢迎页面类 WelcomeActivity
Adapter Adapter 为后缀标识 公告详情适配器 AnnouncementAdapter
工具方法类 UtilsManager 为后缀标识 线程池管理类:ThreadPoolManager
日志工具类:LogUtilsLogger 也可)
打印工具类:PrinterUtils
数据库类 DBHelper 后缀标识 信息数据库:InfosDBHelper
Service Service 为后缀标识 时间服务 TimeService
BroadcastReceiver Receiver 为后缀标识 推送接收 JPushReceiver
ContentProvider Provider 为后缀标识 ShareProvider
自定义的共享基础类 Base 开头 BaseActivity, BaseFragment

3. 接口(interface)

命名规则与类一样采用大驼峰命名法,但必须冠以前缀I ,比如ISomeInterface,接口的实现 类则是去掉前缀I但添加后缀Impl,比如SomeInterfaceImpl

注意:如果项目采用 MVP,所有 Model、View、Presenter 的接口都以 I 为前缀,不加后缀,其他的接口采用上述命名规则。

4. 方法名

方法名都以 lowerCamelCase 风格编写。

方法 说明
initXX() 初始化相关方法,使用 init 为前缀标识,如初始化布局 initView()
isXX(), checkXX() 方法返回值为 boolean 型的请使用 is/check 为前缀标识
getXX() 返回某个值的方法,使用 get 为前缀标识
setXX() 设置某个属性值
handleXX(), processXX() 对数据进行处理的方法
displayXX(), showXX() 弹出提示框和提示信息,使用 display/show 为前缀标识
updateXX() 更新数据
saveXX(), insertXX() 保存或插入数据
resetXX() 重置数据
clearXX() 清除数据
removeXX(), deleteXX() 移除数据或者视图等,如 removeView()
drawXX() 绘制数据或效果相关的,使用 draw 前缀标识

5. 常量

常量名全部大写字母,单词间以下划线分割,如:CONSTANT_VALUE_A

6. 控件

为了更好地区分 UI 控件和普通成员变量,所有用来表示控件的成员变量统一加上控件缩写作为前缀。

名称 缩写
Button btn
CheckBox cb
EditText et
FrameLayout fl
GridView gv
ImageButton ib
ImageView iv
LinearLayout ll
ListView lv
ProgressBar pb
RadioButtion rb
RecyclerView rv
RelativeLayout rl
ScrollView sv
SeekBar sb
Spinner spn
TextView tv
ToggleButton tb
VideoView vv
WebView wv

7. 数据类型

对于表示集合或者数组的非常量字段名,我们可以添加后缀来增强字段的可读性,比如:
集合添加如下后缀:List、Map、Set。
数组添加如下后缀:Arr。
例如:userListuserArrfirstNameSet

8. 资源文件

资源文件命名为全部小写,采用下划线命名法。

如果是组件化开发,可以在组件和公共模块间创建一个 ui 模块来专门存放资源文件,然后让每个组件都依赖 ui 模块。这样做的好处是如果老项目要实现组件化的话,只需把资源文件都放入 ui 模块即可。

8.1 动画资源文件(anim/ 和 animator/)

安卓主要包含属性动画和视图动画,其视图动画包括补间动画和逐帧动画。属性动画文件需要放在 res/animator/ 目录下,视图动画文件需放在 res/anim/ 目录下。

命名规则:{模块名_}逻辑名称
说明:{} 中的内容为可选,逻辑名称 可由多个单词加下划线组成。如:
activity_bottom_in.xmlactivity_top_out.xml

8.2 图片资源文件

res/drawable/ 目录下放的是位图文件(.png、.9.png、.jpg、.gif)或编译为可绘制对象资源子类型的 XML 文件,而 res/mipmap/ 目录下放的是不同密度的启动图标,所以 res/mipmap/ 只用于存放启动图标,其余图片资源文件都应该放到 res/drawable/ 目录下。
命名规则:类型{_模块名}_逻辑名称类型{_模块名}_颜色{} 内容可选)。例如:
btn_red.pngbg_input.pngdivider_white.png

8.3 布局资源文件(layout/)

命名规则:类型_模块名类型{_模块名}_逻辑名称
例如:
activity_main.xml fragment_live_list.xml

二、编码规范

1. 类成员顺序

推荐使用如下排序:

  1. 常量
  2. 字段
  3. 构造函数
  4. 重写函数和回调
  5. 公有函数
  6. 私有函数
  7. 内部类或接口
    例如:
class MainActivity : Activity() {

    val TAG: String = this.javaClass.simpleName

    private var mTitle: String = ""
    private lateinit var mTextViewTitle: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    private fun setTitle(title: String) {
        mTitle = title
    }

    private fun setUpView() {
    }

    inner class AnInnerClass {

    }
}

2. 编写简短方法

在可行的情况下,尽量编写短小精炼的方法。如果某个方法的代码超出 40 行,请考虑是否可以在不破坏程序结构的前提下对其拆解。

3. 键值对字符串常量

针对常用的键值对函数,比如 SharedPreferencesBundleIntent等,请参考以下规则:

字段名前缀
SharedPreferences PREF_
Bundle BUNDLE_
Fragment Arguments ARGUMENT_
Intent Extra EXTRA_
Intent Action ACTION_
例如:
 companion object{
        // 注意:字段的值与名称相同以避免重复问题
        const val PREF_EMAIL = "PREF_EMAIL"
        const val BUNDLE_AGE = "BUNDLE_AGE"
        const val ARGUMENT_USER_ID = "ARGUMENT_USER_ID"

        // 与意图相关的项使用完整的包名作为值的前缀
        const val EXTRA_SURNAME = "com.myapp.extras.EXTRA_SURNAME"
        const val ACTION_OPEN_USER = "com.myapp.action.ACTION_OPEN_USER"
    }

4. 换行

4.1 操作符换行

除赋值操作符之外,我们把换行符放在操作符之前,例如:

val longName = anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne
        + theFinalOne;

赋值操作符的换行我们放在其后,例如:

val longName =
        anotherVeryLongVariable + anEvenLongerOne - thisRidiculousLongOne + theFinalOne;

4.2 函数链的换行

当同一行中调用多个函数时(比如使用构建器时),对每个函数的调用应该在新的一行中,我们把换行符插入在 . 之前。

例如:

Glide.with(context)
        .load("https://blankj.com/images/avatar.jpg")
        .into(ivAvatar);

4.3 RxJava 链式的换行

RxJava 的每个操作符都需要换新行,并且把换行符插入在 . 之前。

例如:

    fun doSomething() {
        ApiManager.getInstance().liveVideoService
                .updateApplyStatus(url, liveKey, applyStatus)
                .compose(RxHelper.defalutHandleResult<Any>())
                .subscribe(object : RxSubscriber<Any>(this) {
                    override fun _onNext(t: Any?) {
                    }

                    override fun _onError(message: String?) {
                    }
                })
    }

三、注释

1. 类注释

/**
 *     author : dell
 *     time   : 2022/08/24
 *     desc   : 欢迎页面
 */
class WelcomeActivity : Activity() {
}

2. 方法注释

   /**
     * bitmap 转 byteArr
     *
     * @param bitmap bitmap 对象
     * @param format 格式
     * @return 字节数组
     */
    fun bitmap2Bytes(bitmap: Bitmap?, format: Bitmap.CompressFormat?): ByteArray? {
        if (bitmap == null) return null
        val baos = ByteArrayOutputStream()
        bitmap.compress(format, 100, baos)
        return baos.toByteArray()
    }

3. 其他注释

        // TODO: 2022/8/24  待处理
        // FIXME: 2022/8/24 待修复

四、版本统一规范

Android 开发存在着众多版本的不同,比如 compileSdkVersion、minSdkVersion、targetSdkVersion 以及项目中依赖第三方库的版本,不同的 module 及不同的开发人员都有不同的版本,所以需要一个统一版本规范的文件。如:

ext {
    // Sdk and tools
    compile_sdk_version = 29
    build_tools_version = '29.0.2'
    min_sdk_version = 22
    target_sdk_version = 29

    version_code = 10
    version_name = '1.0.0'

    // App dependencies
    support_version = '26.1.0'

    leakcanary_version = '1.5.4'
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340