android 代码规范文档(命名规范)

本文详细介绍了一套适用于Android项目的命名规范,包括包名、类名、方法名、布局ID及资源文件命名规则等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 命名规范文档

工欲善其事,必先利其器

                ——论语

犹豫项目原因,很长时间没有写过博客了,终于有了点时间就写点最近项目遇到的问题吧


俗话说得好,要想做好一件事,必须做好十全的准备。同理在开发过程中也同等重要,在我们开发的开始,不是考虑怎么样写代码,而是做好准备工作,(必须需求文档,应该用那些三方库,用什么样的设计模式,该项目适合什么样的开发语言等)。同样也需要指定一套命名规范,命名规范在团队开发中提现的非常重要(独立开发,也许你自己暂时能看懂,等时间长了,你再去看,也许你自己都不知道自己写的什么),在团队开发中,我们需要让别人看懂我们写的什么,如何更好的提高效率,命名规范起到了非常重要的位置。废话不多说了,直接看下文。


Android 命名规范文档

·        驼峰命名法:又称小驼峰命名法。除了首个单词首字母小写除外,其余所有单词所有首字母都要大写。

·        帕斯卡命名法:又称大驼峰命名法。所有单词首字母大写。

 

1、包的命名

包名一律小写

建议采用如下规则:com.【公司名/组织名】.【项目名称】.【模块名】

比如:com.sxwz.mvp.demo。然后在这个目录下根据业务逻辑进行分层。

常见的包分层结构如下:

·        com.xxx.xxx.view –>自定义view 或者是View接口

·        com.xxx.xxx.activities –>activity

·        com.xxx.xxx.fragments –>fragment

·        com.xxx.xxx.adapter –>适配器相关

·        com.xxx.xxx.utils –>公共工具类

·        com.xxx.xxx.bean –>实体类

·        com.xxx.xxx.service –> service服务

·        com.xxx.xxx.broadcast –>广播接收器

·        com.xxx.xxx.db –> 数据库操作类

·        com.xxx.xxx.persenter –>中间对象

·        com.xxx.xxx.model –>数据处理类

2、类的命名

Android中类的命名与JAVA开发采用一致的规范即可。

大驼峰命名法,即所有单词首字母大写。

·        Activity –> xxxActivity.java

·        Application –>xxxApplication.java

·        Fragment –> xxxFragment.java

·        Service –> xxxService.java

·        BroadcastReceiver –>xxxBroReceiver.java

·        ContentProvider –>xxxProvider.java

·        Adapter –> xxxAdapter.java

·        Handler –> xxxHandler.java

·        接口–> xxxInter.java

·        接口实现类–> xxxImpl.java

·        Persenter –> xxxPersenter.java

·        公共父类–> BaseActivity.javaBaseFragment.java- BaseAdapter.java

·        util –> LogUtil.java

·        数据库类 –>BaseSQLiteDBHelper.java

 

3、方法的命名

java开发类似,采用驼峰命名规则。首单词首字母小写,其余单词首字母大写。尽量不要使用下划线。
 
·         初始化方法尽量以init开头。如:initView();initData();
·         调用方法保持临近原则,被调用的方法,放在调用方法下方

    • 调用方法保持“临近原则”,被调用的方法,放在调用方法下方
    • 单个方法体不要过长
    • 代码任何地方不要拼错单词
    • 统一调整IDE的Tab缩进为4个空格
    • 杜绝整个类代码格式化

4、布局文件中的id命名

规则:使用驼峰命名,前缀+逻辑名称,类变量名和布局文件id名称保持一致,不需要下划线分割

控件

缩写前缀

TextView/EditText

Tv/edt

ImageView

img

Button/RadioButton/ImageButton

Btn/rbtn/ibtn

RelativeLayout/LinearLayout/FrameLayout

rLayout/llayout/flayout

ListView

lv

WebView

wbv

CheckBox

cb

ProgressBar

progressBar

seekBar

seekBar

其他控件

控件名首字母缩写作为前缀

·                                如:TextView@+id/tvTitle

·                                如:EditView@+id/edtName

·                                如:Button@+id/btnSearch

4.1. 布局文件命名

规则: 使用前缀_逻辑名称命名,单词全部小写,单词间以下划线 分割。

布局类型

布局前缀

Activity

activity_

Fragment

fragment_

Include

include_

Dialog

dialog_

PopupWindow

popup_

Menu

menu_

Adapter

layout_item_

4.2. 资源文件命名

规则: 使用 前缀_用途 命名,单词全部小写,单词间以 下划线 分割。

·                                图片资源文件命名

前缀

说明

bg_xxx

各类背景图片

btn_xxx

这种按钮没有其他状态

ic_xxx

图标,一般用于单个图标

bg_描述_状态1[_状态2]

用于控件上的不同状态

btn_描述_状态1[_状态2]

用于按钮上的不同状态

chx_描述_状态1[_状态2]

选择框,一般有2态和4态

·                                第三方资源文件,不管在value、drawable

必须携带第三方资源前缀

umeng_socialize_style.xml

pull_refresh_attrs.xml

4.3. 类和接口命名

规则: 使用驼峰规则,首字母必须大写,使用名词或名词词组。要求简单易懂,富于描述,不允许出现无意义或错误单词。

描述

例如

Application类

Application为后缀标识

XXXApplication

Activity类

Activity为后缀标识

闪屏页面类SplashActivity

解析类

Handler为后缀标识

 

公共方法类

Utils或Manager为后缀标识

 

线程池管理类

ThreadPoolManager

 

日志工具类

LogUtils

 

数据库类

以DBHelper后缀标识

MySQLiteDBHelper

Service类

以Service为后缀标识

播放服务:PlayService

BroadcastReceiver类

以Broadcast为后缀标识

时间通知:TimeBroadcast

ContentProvider类

以Provider为后缀标识

单词内容提供者:DictProvider

直接写的共享基础类

以Base为前缀

BaseActivity,BaseFragment

4.4. 方法的命名

规则: 使用驼峰规则,首字母必须小写,使用动词。要求简单易懂,富于描述,不允许出现无意义或错误单词。

方法

说明

initXX()

初始化相关方法,使用init为前缀标识,如初始化布局initView()

httpXX()

http业务请求方法,以http为前缀标识

getXX()

返回某个值的方法,使用get为前缀标识

saveXX()

与保存数据相关的,使用save为前缀标识

deleteXX()

删除操作

resetXX()

对数据重组的,使用reset前缀标识

clearXX()

清除数据相关的

isXX()

方法返回值为boolean型的请使用is或check为前缀标识

processXX()

对数据进行处理的方法,尽量使用process为前缀标识

displayXX()

弹出提示框和提示信息,使用display为前缀标识

drawXXX()

绘制数据或效果相关的,使用draw前缀标识

4.5. 变量命名

规则: 使用驼峰规则,首字母必须小写,使用名词或名词词组。要求简单易懂,富于描述,不允许出现无意义或错误单词。

·                                成员变量命名,自定义变量前添加m前缀,布局控件变量不用添加m前缀

·                                常量命名,全部大写,单词间用下划线隔开

5、 其他规范

·                                Activity继承BaseFragmentActivity或SwipeBackActivity,可以使用ButterKnife注解代替findViewById

·                                方法

o                                                       拆分臃肿方法,每个方法只作一件事

o                                                       做同一个逻辑的方法,尽量靠近放到一块,方便查看

o                                                       不要使用try catch 处理业务逻辑

o                                                       使用JSON工具类,不要手动解析和拼装数据

·                                控制语句

o                                                       减少条件嵌套,不要超过3层

o                                                       if判断使用“卫语句”,减少层级

if(obj != null) { doSomething(); } 

修改为: 

if(obj == null) { return; } doSomething();

o                                                       if语句必须用{}包括起来,即便是只有一句

·                                处理“魔数”等看不懂的神秘数字

o                                                       代码中不要出现数字,特别是一些标识不同类型的数字。

o                                                       所有意义数字全部抽取到Constant公共类中,避免散布在各位类中。

·                                空行:空行将逻辑相关代码段隔开,简洁清楚,提高可读性

o                                                       成员变量之间,根据业务形成分组加空行

o                                                       方法之间加空行

·                                用好TODO标记

o                                                       记录想法,记录功能点,开发过程中可以利用TODO记录一下临时想法或为了不打扰思路留下待完善的说明

o                                                       删除无用TODO,开发工具自动生成的TODO,或则已经完善的TODO,一定要删除。

6、 编码规范

·        代码中尽量不要出现中文。注释和除外。代码中通过strings.xml引用来显示中文。

·        控件声明放在activity级别,这样在activity其他地方可以使用。

·        在一个View.OnClickListener中处理所有的点击事件逻辑,这样看起来很集中和直观。

·        strings.xml中使用%1sd等实现字符串的通配。

·        布局文件中的字体大小,都定义在dimens.xml中。

·        有关marginpadding的值也都放在dimens.xml中。

·        界面之间传值尽量使用intent方式。少用全局变量。

·        不建议在布局文件中添加点击事件。

·        数据类型转换一定要校验。

·        使用常量代替枚举。

·        实体不要在不同模块间共享,但是可以在统一模块下的不同页面共享。

·        建议采用左括号与方法名称在同一行的代码格式来进行代码的编写和格式化。貌似左括号在下一行是C#的形式。

·        业务稍微复杂一些,都有可能提炼一个BaseActivityBaseFragment出来做为公共父类。

·        类注释一定要写,管家的方法也要写方法注释。常量尽量写注释。

7、 Libraries 

Base 一些好的三方lib  仅供参考

·                                fastjson-android-1.2.4.jar

·                                okhttp-2.2.0.jar

·                                okio-1.2.0.jar

·                                picasso-2.5.0.jar

·                                butterknife:7.0.1

·                                ormlite-android:4.48

8、可以选择一些好的ui   下文仅供参考

·                                PullToRefresh

·                                QuickAdapter

·                                PagerSlidingTabStrip

·                                SystemBarTint 状态栏以及导航栏设置背景颜色

·                                SwipeBackLayout 左滑返回

·                                PullToZoomView 可以下拉缩放HeaderView

·                                AutoLoopViewPager 轮播图

·                                PhotoView

·                                ViewPageIndicator

 


         下载地址:http://download.youkuaiyun.com/detail/mingzhnglei/9906516

### 如何将YOLO与PyQt结合使用 为了实现YOLO与PyQt的集成,可以按照以下方法构建应用程序: #### 1. 安装依赖库 确保安装了必要的Python包。这通常包括`opencv-python`用于图像处理以及`torch`和`tqdm`等其他可能需要的机器学习框架。 ```bash pip install opencv-python torch tqdm pyqt5 ``` #### 2. 加载并配置YOLO模型 加载预训练好的YOLO权重文件,并设置好检测参数。这部分代码可以从官方GitHub仓库获取或者基于已有的YOLO版本调整[^1]。 ```python import cv2 from ultralytics import YOLO model = YOLO('yolov8n.pt') # Load model ``` #### 3. 创建PyQt界面 设计图形用户界面(GUI),允许用户选择视频源或图片路径作为输入给YOLO进行目标识别。这里展示了一个简单的窗口布局例子[^2]。 ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QLineEdit class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("YOLO Object Detection") layout = QVBoxLayout() label = QLabel("Enter image path:") line_edit = QLineEdit() button = QPushButton("Detect Objects!") layout.addWidget(label) layout.addWidget(line_edit) layout.addWidget(button) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) ``` #### 4. 实现对象检测逻辑 当点击按钮时触发事件处理器,在其中调用YOLO来进行预测并将结果显示出来。注意要处理不同类型的媒体数据(如摄像头流、本地文件)[^3]。 ```python def on_button_clicked(self): img_path = self.line_edit.text() # Get input from user results = model(img_path) # Perform inference using loaded model res_plotted = results[0].plot() # Plot bounding boxes over detected objects cv2.imshow("Detected Image", res_plotted) # Show result in a window cv2.waitKey(0) button.clicked.connect(on_button_clicked) ``` 以上就是基本的工作流程;当然实际项目可能会更复杂一些,比如还需要考虑多线程运行以提高性能等问题。对于具体细节上的差异,则取决于所选用的具体YOLO变体及其对应的API接口文档说明[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值