是否有关于如何命名资源的约定?

Eug*_*ene 99 android naming-conventions android-resources

是否有如何在Android中命名资源的约定?例如,按钮,textViews,菜单等.

Sam*_*uel 45

Android SDK将是一个很好的起点.

例如,我尝试在活动中对ID进行范围调整.

如果我有一个ListView它就会@android:id/list在所有活动中.
但是,如果我有两个列表,那么我会使用更具体的@id/list_apple@id/list_orange

因此,通用(ids,...)R.java file在独特的(有时被重用)时被重用,前缀为由下划线分隔的泛型.


我观察到,下划线是一回事,例如:

布局宽度是layout_widthXMLlayoutWidth,所以我尽量坚持下去的list_apple

因此,登录按钮将是login,但如果我们有两个登录然后login_foologin_bar.

  • 我也使用这个约定 (2认同)

Ian*_*Ian 26

我不知道是否有任何官方建议.

对于带有小部件和容器的布局中的ID,我使用约定:

<layout>_<widget/container>_<name>
Run Code Online (Sandbox Code Playgroud)

对于我在这些布局中使用的任何尺寸,字符串,数字和颜色,我都采用相同的策略.但是,我确实尝试推广.例如,如果所有按钮都有一个共同的textColor,我不会在名称前加上布局.资源名称为"button_textColor".如果所有textColors都使用相同的资源,它将被命名为'textColor'.对于样式,通常也是如此.

对于我使用的菜单资源:

menu_<activity>_<name>
Run Code Online (Sandbox Code Playgroud)

动画只是不同,因为你不能使用大写字母.我相信,可绘制的xml资源也是如此.


Ali*_*aka 24

取自Android的文档.关于这个问题还有更多.

  • 我的两分钱:我不喜欢*ic*前缀 (12认同)

are*_*naq 16

回答你的问题:是的,有.

例如,您可以通过谷歌搜索找到其中许多.并且没有最好的命名约定.它总是取决于您的需求和项目属性(最重要的是范围).


最近,我读过很多关于在Jeroen Mols中为Android XML命名资源的博客文章.作者提到了所有资源应遵循的基本原则,然后提到了如何将此约定应用于每种资源类型.两者都描述了Android资源命名备忘单:

Android资源命名备忘单

然后,他详细描述了每个元素和每种资源类型.


我想说你可以使用这个小型到中型项目的约定(个人使用,几个月的合同申请).虽然,我不会推荐它用于50多个活动或1000多个字符串的长时间项目.

如此大规模项目的资源价值公约需要对如何使用它们进行更多调查.以字符串为例.可能会受到团队规模,您正在使用的翻译中心(如果有),您正在使用的VCS(例如,避免合并冲突)等因素的影响.您甚至可能会考虑将字符串拆分为多个文件.

我假设你正在寻找一些东西.所以我会推荐我提到的博文.这对初学者来说很好,你绝对可以用它作为灵感来创造你自己的好命名约定.

还要记住,随着项目的发展,许多需求和要求可能会及时发生变化.因此,完全正常的开始时适合的命名约定在2年后将不适用.它完全没问题.你不应该试图预测未来.只需选择一个约定并遵循它.你会发现它是否适合你和你的项目.如果不是,请考虑为什么它不适合并开始使用其他东西.


hac*_*bod 15

资源中使用了一些约定:

  • 对于作为单独文件存在的资源,它们必须为lower_case_underscore_separated.appt工具确保您的文件只是小写的,因为使用大小写混乱可能会导致不区分大小写的文件系统出现问题.
  • 对于仅在values/...(属性,字符串等)中声明的资源,约定通常是mixedCase.
  • 有时会使用一种约定来标记具有"分类"的名称以具有简单的名称空间.例如,您可以看到layout_width和layout_alignLeft等内容.在布局文件中,View和父布局管理的属性混合在一起,即使它们是不同的所有者."layout_*"约定确保这些名称之间没有冲突,并且很容易理解名称影响的实体.

这种"layout_blah"惯例也被用于其他一些地方.例如,有"state_blah"属性是视图可以具有的可绘制状态.

同样由于这两个约定(对于文件使用underscore_separated,对于声明的资源使用mixedCase),您会发现许多不一致.例如,可以使用文件或显式值声明颜色.一般来说,我们希望坚持使用underscore_separated,但并不总是这样.

最终,我们并不担心资源的命名约定.我们保持一致的最重要的是属性的"mixedCase",以及使用"layout_blah"来识别布局参数属性.

此外,浏览公共资源应该对这些约定有一个良好的感觉:

http://developer.android.com/reference/android/R.html

您将看到属性都非常一致(假设您了解layout_约定),drawables都是underscore_separated等.


Mer*_*lin 12

这是任何语言或框架的常见问题,但只要你避免使用保留词,你应该没问题,假设你能记住所谓的东西.

我注意到Android在xml资源文件名上放置了一个重写,但是下划线似乎没问题.ADT实际上说

基于文件的资源名称必须仅包含小写的az,0-9或_.

起初让我感到困惑的是缺少带有id的命名空间,但如果你有两个id,那么通常可以忽略这一点,Android只会重用已定义的id.

对于id,我使用3个字母的限定符,然后是骆驼表示法,例如lblFoo表示静态文本标签(或textview),txtFoo表示可编辑的文本框(Android中的edittext).这可能看起来很奇怪,但我一直在使用它,因为VB6和那些控件被称为标签和文本框.

以下是我常用的一些内容:

  • btnFoo - 按钮
  • pwdFoo - 密码
  • lstFoo - 列表
  • clrFoo - 颜色
  • tblFoo - 表
  • colFoo - 专栏
  • rowFoo - 行
  • imgFoo - 图片
  • dimFoo - 维度
  • padFoo - 填充
  • mrgFoo - 保证金

我在java文件中的代码中使用相同的代码,所以我不必考虑它,包范围将非常愉快地允许:

Button btnFoo = (Button)findViewById(R.id.btnFoo);
Run Code Online (Sandbox Code Playgroud)

你可以选择使用下划线添加一点间距,即btn_foo ......如果我能打破旧习惯,我可能会这样做.

有些人可能认为缩写这些可能并不理想,纯粹主义者会争辩应该使用全名,但当你命名数十个控件并在不同的系统和框架之间进行切换时,全名失去了意义,我在VB,C++,ASP.NET,C#和VB.NET,Android和Python的WinForms中使用了十多年.我永远不需要记住Android是否将其称为文本框或编辑文本.我需要知道的是lblFoo是静态标签,txtFoo是用户输入的内容.

最后要注意的是,无论您决定什么约定,重要的事情都是正确且一致地命名控件,这样您就不会与模糊的默认ID进行搏斗,例如TextView5或不同约定的混合