旗鱼移动Android开发规范

撰写:     旗鱼移动Android开发组

旗鱼移动科技有限公司所属,未经允许不得私自传播

第1版

2016年 5 月 3 日



目录

一、Android开发框架

二、命名规范

  2.1 包(packages)命名规范

  2.2 类(classes)命名规范

  2.3 方法(methods)

  2.4 变量(variables)

  2.5 常量(Constants)

  2.6 资源文件(图片drawable文件夹下)

  2.7 资源布局文件(XML文件(layout布局文件))

  2.8 资源布局文件(layout中的id命名)

三、代码规范

  3.1 排版

  3.2 注释

四、XML规范


一、Android开发框架

  旗鱼移动Android开发项目统一采用公司Android开发框架。

二、命名规范

2.1 包(packages)命名规范

  采用反域名命名规则,全部使用小写字母。一级包名为com,二级包名为qiyu,三级包名根据应用进行命名,四级包名为模块名或层级名等。


包名


此包中包含


com.qiyu.应用名称缩写.ui.activity


页面用到的Activity类 (activities层级名用户界面层)


com.qiyu.应用名称缩写.ui.fragment


页面用到的Fragment类


com.qiyu.应用名称缩写.adapter


页面用到的Adapter类 (适配器的类)


com.qiyu.应用名称缩写.utils/tools


此包中包含:公共工具方法类(utils/tools模块名)


com.qiyu.应用名称缩写.response.data


网络请求返回response层级1


com.qiyu.应用名称缩写.response.bean


网络请求返回response层级2


com.qiyu.应用名称缩写.response.entity


网络请求返回response层级3


com.qiyu.应用名称缩写.bean/entity


此包中包含:元素类


com.qiyu.应用名称缩写.db


数据库操作类


com.qiyu.应用名称缩写.view


自定义的View类等


com.qiyu.应用名称缩写.XXXX


其他定义的包名

2.2 类(classes)命名规范

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



描述


示例


Activity 类


Activity为后缀标识


欢迎页面类WelcomeActivity


Adapter类


Adapte 为后缀标识


新闻详情适配器NewDetailAdapter


解析类


Data为整体后缀标识,二层析类Bean为后缀标识,三层为Entity。


首页解析类HomePosterData


公共方法类


Utils、Tools或Manager为后缀标识(灵活运用)


线程池管理类:ThreadPoolManager

日志工具类:旗鱼点餐中为L


Service类


以Service为后缀标识


时间服务TimeService


BroadcastReceive类


以Receiver为后缀标识


时间通知TimeReceiver


ContentProvider


以Provider为后缀标识


时间共享TimeProvider


直接写的共享基础类


以Base开头


BaseActivity,BaseFragment


............


............


.............

2.3 方法(methods)

  动词或动名词,采用小驼峰命名法例如:onCreate(),run()。自定义方法定义为private ,特别需要例外。


方法


说明


initXX()


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


isXX()


checkXX()方法返回值为boolean型的请使用is或check为前缀标识,有时必须以get开头,如数据库类里。


getXX()


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


processXX()


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


displayXX()


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


saveXX()


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


resetXX()


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


clearXX()


清除数据相关的


removeXXX()


清除数据相关的


drawXXX()


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


initXX()


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


..........


.....................

2.4 变量(variables)

  采用小驼峰命名法。类中控件名称必须与xml布局id保持一致。

  用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。
量词列表:量词后缀说明
First   一组变量中的第一个
Last   一组变量中的最后一个
Next  一组变量中的下一个变量
Pre   一组变量中的上一个
Cur   一组变量中的当前变量

......   .................

2.5 常量(Constants)

  全部大写,采用下划线命名法.例如:MIN_WIDTH。

2.6 资源文件(图片drawable文件夹下)

  全部小写,采用下划线命名法,加前缀区分,图片命名遵守图片命名规范,如有多种形态如按钮,则命名方式如 bt_功能名_xx.selector(操作).xml等。


图片文件名后缀


状态说明


_normal


(default state)


_pressed


state_pressed


_focused


state_focused


_disabled


state_enabled (false)


_checked


state_checked


_selected


state_selected


_hovered


state_hovered


_checkable


state_checkable


_activated


state_activated


_windowfocused


state_window_focused

2.7 资源布局文件(XML文件(layout布局文件))

  全部小写,采用下划线命名法。


模块


命名规则


示例


Activity


activity_功能模块_xx.xml


activity_main.xml、activity_order_detail.xml


Fragment


fragment_功能模块_xx.xml


fragment_head.xml


Dialog


dialog_描述_xx.xml


dialog_hint.xml


PopupWindow


ppw_描述_xx.xml


ppw_info.xml


包含项include


include_模块_xx.xml


include_head.xml


adapter的子布局


item_功能模块_xx.xml


item_main.xml


.........


...........


................

2.8 资源布局文件(layout中的id命名)

  命名模式为:view缩写_view的逻辑名称_XX。如tv_name,tv_name_label。

  View缩写使用view中每个大写字母组合拼成小写,如TextView写成tv即可。

  View的缩写详情示例如下:


控件


命名缩写示例


TextView


tv


EditText


et


ImageView


iv


Button


bt


LinearLayout


ll


RelativeLayout


rl


RecycleView


rv


.........


...........

三、代码规范

3.1 排版

3.1.1 程序块要采用缩进风格编写,缩进的空格数为4个。

  说明:对于由开发工具自动生成的代码可以有不一致。

3.1.2 编程语句长度设置成160个字符(非必须)。

3.1.3 不允许把多个短语句写在一行中,即一行只写一条语句。

  示例:如下例子不符合规范。

  rect.length = 0; rect.width = 0;

  应如下书写:

rect.length = 0;
  rect.width = 0;

3.1.4 if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。

示例:如下例子不符合规范。
    if (pUserCR == NULL) return;

应如下书写:
    if (pUserCR == NULL)
    {
       return;
    }

3.1.5 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格, case语句下的情况处理语句也要遵从语句缩进要求。

3.1.6 程序块的分界符(如大括号‘ {’和‘ }’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、 for、 do、 while、 switch、 case语句中的程序都要采用如上的缩进方式。

示例:如下例子不符合规范。

for (...) {
       ... // program code
    }

if (...)
      {
      ... // program code
      }

  void example_fun( void )
  {
  ... // program code
  }

应书写如下。

  for (...)
  {
    ... // program code
  }

  if (...)
  {
    ... // program code
  }

  void example_fun( void )
  {
    ... // program code
  }

3.1.7 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

  说明:采用这种松散方式编写代码的目的是使代码更加清晰。
由于留空格所产生的清晰性是相对的, 所以, 在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格, 多重括号间不必加空格,因为在 C/C++语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

  示例:

  (1) 逗号、分号只在后面加空格。
   int a, b, c;

  (2)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、 "%",逻辑操作符"&&"、"&",位域操作符"<<"、 "^"等双目操作符的前后加空格。
  if (current_time >= MAX_TIME_VALUE)
  a = b + c;
  a *= 2;
  a = b ^ 2;

  (3)"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。
  flag = !isEmpty;   // 非操作"!"与内容之间
  p = &mem;     // 地址操作"&" 与内容之间
  i++;        // "++","--"与内容之间

(4) if、 for、 while、 switch 等与后面的括号间应加空格,使 if 等关键字更为突出、明显。
if (a >= b && c > d)

3.2 注释

3.2.1 一般情况下,源程序有效注释量必须在20%以上。

  说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。

3.2.2 说明性文件(如.java文件)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。

  示例:下面这段头文件的头注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

  /*************************************************
  Copyright (C), 2015-2016, nizwo Tech. Co., Ltd.
  File name: // 文件名
  Author: Version: Date: // 作者、版本及完成日期
  Description: // 用于详细说明此程序文件完成的主要功能,与其他模块
  // 或函数的接口,输出值、取值范围、含义及参数间的控
  // 制、顺序、独立或依赖等关系
  Others: // 其它内容的说明
  Function List: // 主要函数列表,每条记录应包括函数名及功能简要说明
    1. ....
  History: // 修改历史记录列表,每条修改记录应包括修改日期、修改
     // 者及修改内容简述
  1. Date:
   Author:
      Modification:
  2. ...
  *************************************************/

  说明: Description 一项描述本文件的内容、功能、内部各部分之间的关系及本文件与其它文件关系等。 History 是修改历史记录列表,每条修改记录应包括修改日期、修改者及修改内容简述。

3.2.3 函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。

  示例:下面这段函数的注释比较标准,当然,并不局限于此格式,但上述信息建议要包含在内。

  /*************************************************
  Function: // 函数名称
  Description: // 函数功能、性能等的描述
  Calls: // 被本函数调用的函数清单
  Called By: // 调用本函数的函数清单
  Table Accessed:// 被访问的表(此项仅对于牵扯到数据库操作的程序)
  Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
  Input: // 输入参数说明,包括每个参数的作用、取值说明及参// 数间关系。
  Output: // 对输出参数的说明。
  Return: // 函数返回值的说明
  Others: // 其它说明
  *************************************************/

3.2.4 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

3.2.5 注释的内容要清楚、明了,含义准确,防止注释二义性。

  说明:错误的注释不但无益反而有害。

3.2.6 避免在注释中使用缩写,特别是非常用缩写。

  说明:在使用缩写时或之前,应对缩写进行必要的说明。

3.2.7 对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。

  说明:这些语句往往是程序实现某一特定功能的关键,对于维护人员来说,良好的注释帮助更好的理解程序,有时甚至优于看设计文档。

3.2.8 避免在一行代码或表达式的中间插入注释。

  说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。

3.2.9 注释格式尽量统一,建议使用“ /* …… */”,类或方法名注释使用/**.......*/。

3.2.10 注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

  示例:如下例子不符合规范。

  例 1:
  /* get replicate sub system index and net indicator */

  repssn_ind = ssn_data[index].repssn_index;
  repssn_ni = ssn_data[index].ni;

  例 2:
  repssn_ind = ssn_data[index].repssn_index;
  repssn_ni = ssn_data[index].ni;
  /* get replicate sub system index and net indicator */

  应如下书写
  /* get replicate sub system index and net indicator */
  repssn_ind = ssn_data[index].repssn_index;
  repssn_ni = ssn_data[index].ni;

3.2.11 将注释与其上面的代码用空行隔开。

  示例:如下例子,显得代码过于紧凑。
  /* code one comments */
  program code one
  /* code two comments */
  program code two

  应如下书写
  /* code one comments */
  program code one

  /* code two comments */
  program code two

3.2.12 注释与所描述内容进行同样的缩排。

  说明:可使程序排版整齐,并方便注释的阅读与理解。

  示例:如下例子,排版不整齐,阅读稍感不方便。

  void example_fun( void )
  {
  /* code one comments */
  CodeBlock One

/* code two comments */
  CodeBlock Two

   }

  应改为如下布局。

  void example_fun( void )
  {
    /* code one comments */
    CodeBlock One

    /* code two comments */
    CodeBlock Two
  }

3.2.13 在代码的功能、意图层次上进行注释,提供有用、额外的信息。

  说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。

  示例:如下注释意义不大。

  /* if receive_flag is TRUE */
  if (receive_flag)

  而如下的注释则给出了额外有用的信息。 
  /* if mtp receive a message from links */
  if (receive_flag)

3.3 变量、结构

3.3.1 去掉没必要的公共变量。

  说明:公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。

3.3.2 仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。

  说明:在对变量声明的同时,应对其含义、作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系。

3.3.3 当向公共变量传递数据时,要十分小心,防止赋与不合理的值或越界等现象发生。

  说明:对公共变量赋值时,若有必要应进行合法性检查,以提高代码的可靠性、稳定性。

3.3.4 防止局部变量与公共变量同名。

  说明:若使用了较好的命名规则,那么此问题可自动消除。

3.3.5 严禁使用未经初始化的变量作为右值。

  说明:引用未经赋值的变量,经常会引起系统崩溃。

3.3.6 结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。

  说明:软件向前兼容的特性,是软件产品是否成功的重要标志之一。如果要想使产品具有较好的前向兼容,那么在产品设计之初就应为以后版本升级保留一定余地,并且在产品升级时必须考虑前一版本的各种特性。

3.3.7 编程时,要注意数据类型的强制转换。

  说明:当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患。

3.3.8 尽量减少没有必要的数据类型默认转换与强制转换。

3.3.9 合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转换。

四、XML规范

4.1 布局

4.1.1 避免过多嵌套

  说明:嵌套的 LinearLayout 可能会使得 View 的层级结构很深。使用LinearLayout时,通常我们喜欢用嵌套的布局来动态设置一个View的Visibility ,由于LinearLayout是线性的,因此即使隐藏一个View也不会影响到其它View的排列。而在RelativeLayout中,View的位 置都是相对于其它View的,因此,隐藏之后,会导致之前的View没有参考对象了,导致的相对位置改变,这时你可以使用 alignWithParentIfMissing=”true”来处理这种情况。

此外,嵌套使用了 layout_weight 参数的 LinearLayout 的计算量会尤其大,因为每个子元素都需要被测量两次。这对需要多次重复 inflate 的 Layout 尤其需要注意,比如使用 ListView 或 GridView 时。

示例:如下布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"/>
</RelativeLayout>

可以直接写成如下布局

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Hello World!"/>

4.2 控件

4.2.1 控件中避免使用drawableLeft、drawableRight、drawableXXXXX。

  说明:使用这种标志在控件中绘制图片,导致图片大小不可控制,将产生严重的屏幕适配问题。

4.2.2 ImageView控件必须明确控制其大小,除非是适应屏幕宽或高,即只能使用match_parent或者明确值,如35dp、35px。

  说明:ImageView不明确设定大小,而采用wrap_content,则产生严重的屏幕适配问题。

4.3.3 控件中使用background属性,且值引用图片,则控件必须明确控制其大小,除非是适应屏幕宽或高,即只能使用match_parent或者明确值,如35dp、35px。

  说明:不明确设定大小,而采用wrap_content,则产生严重的屏幕适配问题。

4.3.4 控件设定明确的值大小,必须引用项目框架提供的值。

  说明:不引用项目提供的数据值,而使用自己设定的值如30sp、30dp、30px等,则产生严重的屏幕适配问题。

4.3.5 可以灵活使用控件,如TextView可以当做Button来使用。

原文地址:https://www.cnblogs.com/springl/p/8715259.html

时间: 2024-07-31 03:53:25

旗鱼移动Android开发规范的相关文章

Android开发规范——命名

在讲解命名规范前,先初略介绍下当前主要的标识符命名法和英文缩写规则.标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外,其余所有单词的第一个字母大写. 2 帕斯卡(pascal)命名法:又称大驼峰命名法,所有单词的第一个字母大写 3 下划线命名法:单词与单词间用下划线做间隔. 4 匈牙利命名法:广泛应用于微软编程环境中,在以Pascal命名法的变量前附加小写序列说明该变量的类型. 量的取名方式为:<scope_> + <prefix_>

Android开发规范(编码+性能+UI)

现在为你带来Android开发规范,包括Android编码规范,Android性能优化以及Android UI优化. 一.Android编码规范 1.java代码中不出现中文,最多注释中可以出现中文 2.局部变量命名.静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3.常量命名 只能包含字母和_,字母全部大写,单词之间用_隔开 4.layout中的id命名 命名模式为:view缩写_模块名称_view的逻辑名称 view的缩写详情如下 LayoutView:lv

Android开发规范

一.Android编码规范1.java代码中不出现中文,最多注释中可以出现中文2.局部变量命名.静态成员变量命名只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写3.常量命名只能包含字母和_,字母全部大写,单词之间用_隔开4.layout中的id命名命名模式为:view缩写_模块名称_view的逻辑名称view的缩写详情如下LayoutView:lvRelativeView:rvTextView:tvImageView:ivImageButton:imButton:btn5.acti

值得你学习的 Android 开发规范(上)

前言 AS规范 命名规范 资源文件规范 版本统一规范 第三方库规范 注释规范 其他的一些规范 1 前言 为了利于项目维护以及规范开发,促进成员之间Code Review的效率,故提出以下开发规范,如有更好建议,欢迎到GitHub提issue. GitHub:https://github.com/Blankj/AndroidStandardDevelop 2 AS规范 工欲善其事,必先利其器. 尽量使用最新版的IDE进行开发: 编码格式统一为UTF-8: 编辑完.java. .xml等文件后一定要

值得你学习的 Android 开发规范(下)

4 资源文件规范 4.1 资源布局文件(XML文件(layout布局文件)) 全部小写,采用下划线命名法 4.1.1 contentView命名 必须以全部单词小写,单词间以下划线分割,使用名词或名词词组. 所有Activity或Fragment的contentView必须与其类名对应,对应规则为:将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀). 例如:activity_main.xml 4.1.2 Dialog命名 规则:dialog_描述.xml 例如:dialog_hint.x

Android 开发规范

一. 总包命名规范: 1. 主程序:com  . 公司简写 . 项目名称简写 如彩票主程序: com.whszzy.caipiao 2. 独立模块:com . 公司简写 . 项目名称简写 . 模块名称 如彩票Api :com.whszzy.caipiao.api 二. 具体模块包命名规范: 1. 共公单元    util            com.whszzy.caipiao.util 2. 自定义UI    ui             com.whszzy.caipiao.ui 3. 数

Android开发规范之编码规范

1,java代码中不出现中文,最多注释中可以出现中文,中文统一写在strings.xml中: 2,局部变量命名.静态成员变量命名 只能包含字母,单词首字母大写,其他字母都为小写3,常量命名只能包含字母和_,字母全部大写,单词之间用_隔开4,布局文件中的id命名命名模式为:view缩写_模块名称_view的逻辑名称常用控件的缩写如下LayoutView:lv_RelativeView : rv_TextView : tv_ImageView : iv_ImageButton : im_Button

【Android】Android开发规范的一点小体会

由于Java面向对象编程的特性, 在命名时应尽量选择名词 1.只有一个xxxApplication extends Application,初始化全局变量,Android使用Application总结 2.所有的xxxActivity extends BaseActivity,(BaseActivity extends Activity)初始化所有Activity用到的全局变量.方法. 3.所有的xxxFragment extends BaseFragment,(BaseFragment ext

android产品研发(一)--&gt;实用开发规范

从这篇文章开始我们暂停一下对android源码的分析,开始讲一下android产品研发中一些常用的技术,技巧,方法,实践等姿势.这里需要强调的是我们所讲解的这些东西可能对产品开发中比较常用的,因为对于项目开发中,可能更多的强调管理,进度方法的东西,对工程化的东西比较强调,而我们这里更多的是对产品技术方面的归纳总结. 而本文中选择将开发规范作为这个系列的第一篇文章,就是个人感觉产品研发过程中,开发规范真的很重要,很重要,非常重要(重要的事情说三遍),一个好的开发规范可以让团队中的人对他人的代码更熟