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

时间:2011-08-23 18:10:10

标签: android naming-conventions android-resources

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

15 个答案:

答案 0 :(得分:43)

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

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

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

因此,R.java file中的通用(ids,...)会被重用,而唯一的(有时会被重用)则会被通用的以下划线分隔。


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

xml 中的布局宽度为layout_width代码中的布局宽度为layoutWidth,因此我尝试将其视为list_apple < / p>

因此,“登录”按钮为login,但如果我们有两次登录,则为login_foologin_bar

答案 1 :(得分:24)

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

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

<layout>_<widget/container>_<name>

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

对于我使用的菜单资源:

menu_<activity>_<name>

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

答案 2 :(得分:23)

取自Android's documentation。关于这个问题还有更多。

答案 3 :(得分:16)

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

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

最近,我从Jeroen Mols中读到了关于Android XML中命名资源的非常好blog post。作者提到了所有资源应遵循的基本原则,然后提到了如何将此约定应用于每种资源类型。两者都在Android resource naming cheat sheet上描述:

Android resource naming cheat sheet

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

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

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

我认为你正在寻找一些东西。所以我会推荐我提到的博文。这对初学者来说很好,你绝对可以将它作为灵感来创造你自己的良好命名惯例。

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

答案 4 :(得分: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等等。

答案 5 :(得分:11)

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

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

  

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

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

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

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

  • btnFoo - 按钮
  • pwdFoo - 密码
  • lstFoo - list
  • clrFoo - color
  • tblFoo - table
  • colFoo - 列
  • rowFoo - row
  • imgFoo - image
  • dimFoo - 维度
  • padFoo - padding
  • mrgFoo - margin

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

Button btnFoo = (Button)findViewById(R.id.btnFoo);

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

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

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

答案 6 :(得分:3)

我认为谷歌没有推出任何标准惯例。我已经看到人们用各种不同的方式命名,即使在不同的官方Google应用程序中也是如此。

在尝试理解一个目录层次结构中的100个布局(或绘图,菜单等)文件时,无论什么帮助最多。

答案 7 :(得分:3)

设计师和开发人员的有用链接 - here

尺寸和大小,命名约定,样式和主题,九个补丁等。

答案 8 :(得分:3)

一个简短的回答:如果你想向Android开发人员学习,一个很好的例子是支持库v7(https://dl-ssl.google.com/android/repository/support_r21.zip

否则,这就是我考虑的命名资源:
1.编写代码时轻松查找资源
2.阅读代码时轻松了解资源
3.使名称对翻译人员有用(仅R.string.*资源)
4.重复使用<include/>R.id.*资源冲突)的布局 5.处理图书馆项目

逻辑上,安排资源应该与将java类分组到包(或将文件放入文件夹)中没有什么不同。但是,由于Android资源没有名称空间,因此必须将前缀添加到资源名称才能实现相同(例如com.example.myapp.photo成为com_example_myapp_photo)。

我建议将应用程序划分为单独的组件(活动,片段,对话框等),其中包含可用作资源前缀的短唯一名称。通过这种方式,我们将资源与相关功能组合在一起,这使得它们易于查找(第1点),同时避免与<include/>和库项目(点)的命名冲突4和5)。请注意,多个组件共有的资源仍然可以有前缀(例如R.string.myapp_ok_button)。

在前缀之后,名称应告诉我们资源的用途(要执行的操作,要显示的内容等)。选择一个好名字对理解很重要(第2点和第3点)。

有时&#34; component_name&#34;将为我们提供足够的信息,如果R类已经给出了类型(在R.string.myapp_name_string中第2个&#34;字符串&#34;是多余的),则尤其如此。然而,明确地添加类型可以提高理解(例如,它可以有助于翻译者区分祝酒词或标签)。有时候&#34;名称&#34;和&#34;键入&#34;可以交换部件以允许基于类型的过滤(R.string.photo_menu_*将仅为照片组件提供与菜单相关的项目。)

让我们说我们正在写一个拍摄活动,com.example.myapp.photo .PhotoActivity。我们的资源看起来像这样(按组件分组&#34;照片&#34;):

R.layout.photo //if only a single layout is used
R.menu.photo  
R.string.photo_capture_instructions_label  
R.id.photo_capture_instructions_label  
R.id.photo_capture_button  
R.id.photo_capture_image  
R.drawable.photo_capture_placeholder  
R.dimen.photo_capture_image_height  

答案 9 :(得分:2)

如果你在Android的文档中逛逛,有各种各样的“最佳实践”,但肯定没有具体的规则。例如,在Icon Design Guidelines中,Google建议使用“ic_”前缀命名图标。

一个好的起点可能是Providing Resources

如果您想了解Google开发人员的工作方式,还可以在SDK源代码/示例以及Android Developers Blog中进行挖掘。

答案 10 :(得分:1)

我为字符串找到了方便的下一个命名约定:

[<action>]_<object>_<purpose>

例如,clear_playlist_text,delete_song_message,update_playlist_positivebutton_text。这里的“动作”是可选的。

答案 11 :(得分:0)

您可以阅读Google文档中的代码样式,以获得一个想法here

答案 12 :(得分:0)

我通常遵循资源ID的java命名约定(不适用于文件的文件),除了我在id之前添加了“x”,例如:

<TextView android:id="@+id/xTvName" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

在java中 我们可以简单地使用它(我们也可以记得很简单)

TextView mTvName=(TextView)findViewById(R.id.xTvName);

这里mTvName(一般是建议的命名约定)和xTvName在布局文件中作为android TextView的Id(x表示XML)的一部分命名,我遵循这种类型的视图对象的命名约定,如按钮和EditText等。

XML IDS中的

xViewTypeSpecificName

Java中的

mViewTypeSpeficName

当我创建复杂的布局时,上述约定使我的生活更轻松。 试着让你的名字尽可能地缩短,如果它们对其他联合开发者来说是可以理解和有意义的话会更好(但每次都不可能),希望我的经验会帮助别人,欢迎提出建议。

答案 13 :(得分:0)

在我们的Android项目中,有许多组件,如按钮,标签,文本框。如此简单的名称,例如&#34; name&#34;这对于识别&#34; name&#34;而言非常困惑。是标签或文本框。主要是当你维护其他开发人员开发的项目时。

为了避免这种混淆,我使用了Buttons TextBoxes或Labels

的名称

示例:

 btnName
 labName
 txtName
 listName

这可能对你有帮助。

答案 14 :(得分:-2)

有一些限制:

  1. 资源名称应包含a-z,0-9,_
  2. 资源名称应以a-z,_
  3. 开头

    顺便说一句,建议您遵循指南或从标准代码中学习。