83

我正在寻找一个彻底的 Android 命名约定建议。我在这里发现了一点:

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

其中说:

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

然而,我正在寻找涵盖 Android 各个方面的更广泛的内容:

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

如果有一些普遍接受的建议,我很乐意遵循。所有的 SDK 似乎都有自己的方式,所以我对 Android 的方式特别感兴趣。

4

7 回答 7

93

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活动的所有组件必须以活动名称开头所有组件都应具有前缀或短名称,例如btn例如Button ,登录活动组件的名称应如下所示。

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
于 2015-01-07T11:40:56.033 回答
34

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

这是我使用的。我也会从那个链接复制。

对象命名

  • 请勿按照 Google 指南使用mor前缀。s我已经停止了多年,我发现没有它们会更容易。当您使用私有或静态的东西时,IDE 会告诉您;这似乎是一个过时的约定。
  • 常量以大写字母开头
  • 首字母缩略词应该只大写第一个字母。例如,functionUrlunitId。不是unitID
  • 对象类型的前缀。例如,包含名称的 TextView 将是tvName. 带有密码的 EditView 将是etPass.
  • 如果它通常在活动中只使用一次(例如 ListView),不要害怕直接调用它lv
  • 如果它不是对象类型,只需按其功能命名即可。例如,如果它是一个包含 ID 的字符串,则将其命名为id,而不是 stringId。IDE 会告诉您它何时是字符串、浮点数或长整数。
  • 保持清晰。使用类似的东西Pass而不是Password.
  • 在 XML 中,名称应该是下划线,不能大写,例如tv_nameet_pass
  • 将 放在android:idXML 中的第一个属性。

文件命名

  • 为其类型添加前缀布局。例如fragment_contact_details.xml, view_primary_button.xml, activity_main.xml.
  • 对于类,将它们分类到文件夹中,但使用后缀。例如,/activities/MainActivity.java/fragments/DeleteDialog.java。我的文件夹是活动、片段、适配器、模型实用程序。
  • 适配器应该说明它们的使用方式和时间。因此,可能会调用 ChatActivity 的 ListView 适配器ChatListAdapter

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

  • 对于颜色,请使用名称,例如gray_light,而不是button_foreground

  • 对于尺寸,使用名称,例如spacing_large,而不是button_upper_padding

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

字符串.xml

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

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

推理

命名约定的目的不是让一切都整齐一致。它可以标记可能的错误并改进工作流程。其中大多数旨在方便键盘快捷键。尝试专注于最小化错误和改进工作流程,而不是看起来不错。

前缀非常适合那些“TextView 的名称是什么?” 时刻。

后缀用于您不经常以这种方式访问​​的内容,但可能会造成混淆。例如,我可能不确定我是否将代码放在该页面的 Activity、Fragment 或 Adapter 中。如果你愿意,它们可以被丢弃。

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

于 2015-12-23T04:47:54.617 回答
14

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


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

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

这方面的一个例子是OrderActivity.class, order_activity.xml, order_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

文本视图: tv
按钮: 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

于 2016-02-08T14:50:46.220 回答
8

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

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

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

我也尽量给出有意义的名字,所以你通常不会看到 "listView" 或 "imageView2" 作为 ids ,而是像 "contactsListView" 和 "contactImageView" 这样的东西。相同的名称(或类似名称)也将匹配 java 代码中的变量,以便更容易找到。

所以,简而言之,我的建议是:

  • 尽量避免名称中的数字。它们通常意义不大,并且表明您只对 UI 设计师使用了拖放功能。

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

  • 尝试为所有资源名称(包括 id)添加前缀,以显示它们属于哪个上下文,并实现唯一性。

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

于 2012-10-13T08:01:06.827 回答
2

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

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

我遵循了这个方案,例如

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

所以它有点像包名,从一般到详细。它还允许进行整齐的分类。

于 2012-10-13T08:13:44.253 回答
1

每个人都使用自己的,主要目标是避免错误和误解,特别是当其他人阅读您的代码时。尽管现代 IDE 中的语法高亮显示和自动代码检查使其意义不大。

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

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

几个例子:

  • 使用 m 为类变量添加前缀,并使静态变量全部大写,并使用_分隔词。不要为降低范围变量添加任何前缀。

  • UI 父级之后的名称布局,例如act_main.xml, frg_detail.xml, itm__act_main__list1.xml; 对于带有 id的in的活动MainActivity、片段DetailFragment、项目布局。ListViewMainActivitylist1

  • 在 xml 布局中命名元素 ID,例如:lsv__act_main__list1对于 ListView 和btn__act_main__submit`Button 元素。这使得它们更容易通过自动完成找到。

于 2012-10-13T08:25:46.287 回答
1

至于命名约定和/或最佳实践,我经常遵循github中ribot/android-guidelines存储库的这个 md 文件,其中包含项目和编码指南。

于 2020-09-08T03:18:01.677 回答