Android命名约定


81

我正在寻找详尽的Android命名约定建议。我在这里发现了一些:

http://source.android.com/source/code-style.html#follow-field-naming-conventions

其中说:

  • 非公共,非静态字段名称以m开头。
  • 静态字段名称以s开头。
  • 其他字段以小写字母开头。
  • 公共静态最终字段(常量)为ALL_CAPS_WITH_UNDERSCORES

但是我正在寻找涵盖Android各个方面的更广泛的东西:

  • 如何命名其中的布局和视图,
  • 如何命名菜单
  • 如何命名样式
  • 如何命名数据库表(单数,复数)和其中的字段
  • 等等

如果有一些普遍接受的建议,我将乐意效仿。所有SDK似乎都按照自己的方式行事,因此我对Android的实现方式特别感兴趣。


1
看到这是Google的第一款产品,我想我想通过在Android Studio和Eclipse中使用“重构”来补充一点,您可以重命名某些内容并更改所有出现的内容。这对我很有用,因为我对命名约定很挑剔。因此,我的搜索。重命名该特定实例并继续前进是非常容易的。
埃里克·安东尼

忽略Google的编码风格,它的解释还不够……甚至没有完整的转换。没有任何国际编码转换,因为每个公司/ grp都有自己的编码转换。用你自己的。
Yousha Aleayoub '16

Answers:


88

ribot的Android指南是标准命名约定的一个很好的例子:

XML文件的命名约定:

activity_<ACTIVITY NAME>.xml - for all activities
dialog_<DIALOG NAME>.xml - for all custom dialogs
row_<LIST_NAME>.xml - for custom row for listview
fragment_<FRAGMENT_NAME>.xml - for all fragments

xml文件中组件/小部件的命名约定:

X活动的所有组件都必须以活动名称开头,所有组件都应具有前缀或简称,例如btnButton 例如,登录活动组件的名称应类似于以下内容。

activity_login_btn_login
activity_login_et_username
activity_login_et_password

主要部件的简称:

Button - btn
EditText - et
TextView - tv
ProgressBar - pb
Checkbox - chk
RadioButton - rb
ToggleButton - tb
Spinner - spn
Menu - mnu
ListView - lv
GalleryView - gv
LinearLayout -ll
RelativeLayout - rl

6
只要您(或您所有的公司)在乎的adpot 1样式谁从那里来,它就不会真正实现。到目前为止,我制作了大约4个或多或少简单的android应用,与此同时,我也做出了几乎相同的约定。我认为这就是您所需要的。我用'a_'代替'activity',依此类推,因为它太长了,哈哈
Srneczek 15-4-28

是否真的需要以活动名称开头组件名称?我的意思是无论如何,您都将引用各自布局文件中的名称。
szedjani 2015年

1
它不是真正必要,但是当您的项目正在发展时,这将非常有帮助
Pravin Bhosale

5
MainActivity + activity_main?我知道这是标准,但是谁发明了这个废话?大部分内容都不太含糊,尤其是当出现片段时,为什么名称会变长。
brainray 2016年

我个人认为这不是很一致
Jethro'2

28

这是一个很好的最佳实践集合,始于:https : //github.com/futurice/android-best-practices

这是我用的。我还将从该链接复制。

对象命名

  • 请勿按照Google准则使用ms前缀。我已经停了好多年,没有他们我发现它更容易。当您使用私有或静态内容时,IDE会告诉您。似乎已经过时了。
  • 常量从大写字母开始
  • 首字母缩写词只能大写第一个字母。例如functionUrlunitId。不unitID
  • 带对象类型的前缀。例如,包含名称的TextView将为tvName。带有密码的EditView将是etPass
  • 如果它通常在一个活动中仅使用一次(例如ListView),请不要害怕只是调用它 lv
  • 如果不是对象类型,只需通过其功能命名即可。例如,如果它是一个包含ID的字符串,则将其命名为id,而不是stringId。当它是字符串,浮点数或长整数时,IDE会告诉您。
  • 保持清晰易读。使用Pass代替Password
  • 在XML中,名称应带有下划线且不能大写,例如 tv_nameet_pass
  • android:idXML作为第一个属性。

文件命名

  • 类型为前缀的布局。例如fragment_contact_details.xmlview_primary_button.xmlactivity_main.xml
  • 对于这些类,将它们分类到文件夹中,但要使用后缀。例如,/activities/MainActivity.java/fragments/DeleteDialog.java。我的文件夹是活动,片段,适配器,模型实用程序
  • 适配器应说明如何以及何时使用它们。因此,可以调用用于ChatActivity的ListView适配器ChatListAdapter

colors.xml和dimens.xml作为调色板

  • 对于颜色,请使用gray_light,而不是button_foreground

  • 对于dimen,请使用spacing_large,而不是button_upper_padding

  • 如果要设置特定于按钮颜色或填充的内容,请使用样式文件。

strings.xml

  • 使用类似于名称空间的键来命名您的字符串,不要担心为两个或多个键重复一个值。

  • 使用error.message.network,而不是network_error

推理

命名约定的目的不是使所有内容都保持整洁和一致。它在那里标记可能的错误并改善工作流程。其中大多数旨在方便键盘快捷键。尝试着重于最大程度地减少错误并改善工作流,而不是看起来不错。

前缀对于那些“ TextView的名称是什么?”非常有用。片刻。

后缀有一些您不经常使用的后缀,但可能会造成混淆。例如,我可能不确定是否将代码放入该页面的“活动”,“片段”或“适配器”中。如果您愿意,可以将其删除。

XML id通常是小写的,并且使用下划线,只是因为每个人似乎都是这样做的。


那类的名字呢?例如:ActivityMainMainActivity。您会推荐哪一个?我认为这样做很有意义:CLASS :NameActivity、 LAYOUT :name_activity、 COMPONENT :nameactivity_component_name。这方面的一个例子是MainActivity,main_activity,mainactivity_btn_cancel

4
我正在使用m和s前缀。我发现它非常有用,并且可以肯定,它不会使代码变得更糟。而且有时候我更喜欢在没有IDE的情况下打开某些文件。区分字段和简单变量非常容易。
2016年

目前,我正在看Camera2示例,我真的不在乎mBackgroundHandler等来自何处,因此命名它们backgroundHandler会将重要信息放在左侧。如果需要,可以在参数中添加' '后缀,并在局部变量中添加'_ '后缀,使您在视觉和心理上都跳过下划线,除非您需要集中注意。
WillC

12

一致性
每个人(除非团队合作)都会有自己的约定,您选择的是哪个都没关系。确保在整个应用程序中保持一致确实很重要。


结构就
我个人而言,我使用这样的命名约定,因为它从类名一直延伸到组件,并且在整个xml中都是一致的:

  • <ClassName>
  • 活动<ClassName>**Activity**
  • 布局classname_activity
  • 组件IDclassname_activity_component_name

这方面的一个例子是OrderActivity.classorder_activity.xmlorder_activity_bn_cancel。请注意,所有XML均为小写。


简化布局
如果您想使用较短的名称来保持代码整洁,请参见。那么另一种方法可以是缩写XML中的所有名称以及布局。

一个示例是OrderActivity .class:ord_act .xml,ord_act _bt_can,ord_act _ti_nam,ord_act _tv_nam。我将名称分解为三个,但这取决于您拥有多少个相似的名称


缩写组件类型
缩写组件类型时,也请尝试使它们保持一致。我通常将两个字母用作组件类型,并将三个字母用作名称。但是,有时如果名称是布局中该类型的唯一元素,则不需要该名称。ID的原则是唯一的

  • 组件IDnam_act_component_nam

组件类型缩写(此列表显示两个字母,足够多)
框架布局: fl
线性布局: ll
表布局: tl
表行: tr
网格布局: gl
相对布局: rl

文本视图:电视
按钮: bt
复选框: cb
开关: sw
切换按钮: tb
图像按钮: ib
图像视图: iv
进度栏: pb
搜寻栏: sb
评级栏: rb
旋转器: sp
WebView: wv
编辑文本: et

单选组: rg
列表视图: lv
网格视图: gv
可扩展列表视图: el
滚动视图: sv
水平滚动视图: hs
搜索视图:* se
选项卡主持人: th
视频视图: vv
拨号程序过滤器: df

包括: ic
片段: fr
自定义视图(其他): cv


2
单选按钮=等级栏?
米奇

8

我认为这还没有约定。每个公司都有自己的规则,我认为这里没有人在乎。

对我来说,我更喜欢将名称绑定到上下文中。例如,如果有一个名为“ MainActivity”的活动,则其布局名称将为“ main_activity.xml”,对于与该活动相关的每个资源,我都添加一个前缀“ main_activity”,以便我知道它会使用它。用于此活动的ID也是一样。

我使用这些命名的原因是,找到它们更容易,如果需要可以删除它们,并且如果使用android库,则不会用其他替换它们,因为它们的名称非常独特。

我还尽力提供有意义的名称,因此您通常不会将“ listView”或“ imageView2”作为id看到,而会看到诸如“ contactsListView”和“ contactImageView”之类的东西。同样的名称(或相似名称)也将与Java代码中的变量匹配,以使其更易于查找。

简而言之,我的提示是:

  • 尽量避免名字中有数字。它们通常意义不大,并且表明您只对UI设计器使用了拖放操作。

  • 对于演示,POC和此处的问题,请不要担心命名。

  • 尝试在所有资源名称(包括ID)中添加前缀,以显示资源所属的上下文,并实现唯一性。

  • 尽可能给出有意义的名字。


2

最新的Android Eclipse插件会创建您在创建新项目时自动提及的某些文件。由此,命名是这样的:

layout/activity_main.xml
menu/activity_main.xml
...

我遵循这个计划,例如

layout/fragment_a.xml
layout/fragment_b.xml
...

因此,就像包名一样,从常规到详细。它还允许整齐的排序。


1

每个人都有自己的用途,主要目的是避免错误和误解,尤其是在其他人阅读您的代码时。尽管语法高亮显示和现代IDE中的自动代码检查功能使它的优点减少了。

但是,这些命名约定也使在打开代码完成功能时非常方便。例如,仅键入m和自动完成将显示一个类字段列表。

但是很多时候,您必须使用不使用此类约定的其他人的代码。这样的受保护变量和覆盖的方法参数只会增加混乱。

几个例子:

  • 给类变量加m前缀,并使静态的final变量大写,并用_单独的单词表示。不要在低范围变量前添加任何内容。

  • 在UI父后名称的布局,例如act_main.xmlfrg_detail.xmlitm__act_main__list1.xml,对于一个活动,分别是ID为in的inMainActivity的fragmentDetailFragment和item布局。ListViewMainActivitylist1

  • 名称元素ID以xml布局的形式出现,例如:lsv__act_main__list1用于ListView和btn__act_main__submit`Button元素。这使得使用自动完成功能更容易找到它们。


thx-对我来说,编码约定在功能强大的IDE时代并不是真正毫无意义的,只是我自己承担了一下,所以我希望找到一些更广为接受的
格式

没关系。它们也有其他好处:您可以在LogCat中看到UI视图的ID,从该ID中您可以知道它的含义以及在代码中的查找位置。
SD

我会完全合格的名字去的前缀:activit_main.xmlfragment_main.xmlbutton_activity_main_submit.xml
拉蒙·加西亚·佩雷斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.