是否存在如何在Android中命名资源的约定?例如,按钮,textViews,菜单等
答案 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_foo
和login_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上描述:
然后,他详细描述了每个元素和每种资源类型。我想说你可以在中小型项目中使用这种约定(个人使用,几个月的合同申请)。虽然,我不会推荐它用于50多个活动或1000多个字符串的长期项目。
如此大规模项目的资源价值公约需要对如何使用它们进行更多调查。以字符串为例。可能会受到团队规模,您正在使用的翻译中心(如果有),VCS正在使用(例如,避免合并冲突)等因素的影响。您甚至可能会考虑将字符串拆分为多个文件。 / p>
我认为你正在寻找一些东西。所以我会推荐我提到的博文。这对初学者来说很好,你绝对可以将它作为灵感来创造你自己的良好命名惯例。
还要记住,随着项目的发展,许多需求和要求可能会及时发生变化。因此,完全正常的开始时适合的命名约定在2年后将不适用。它完全没问题。你不应该试图预测未来。只需选择一个约定并遵循它。你会发现它是否适合你和你的项目。如果不是,请考虑它为什么不适合并开始使用其他东西。
答案 4 :(得分:15)
资源中使用了一些约定:
这个“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和那些控件被称为标签和文本框。
以下是我常用的一些内容:
我在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)
有一些限制:
顺便说一句,建议您遵循指南或从标准代码中学习。