在Android中,XML元素的id命名的最佳实践是什么?

15

我不确定有没有人遇到过这个问题,但对我来说这是一个很大的烦恼。

在安卓中如何为xml元素设置id?

目前,我使用这种模式设置id: [活动/片段名称][元素类型][具体名称]。例如,如果我有一个用于在LoginActivity中保存电子邮件的EditText,我将给它一个id 'LoginEditTextEmail'。

我面临的问题是,使用这种方法,id 往往变得非常长。

你如何设置id?最佳实践是什么?

4个回答

13

使用具有描述性的名称是理想的(与任何编程语言中的变量名称相同)。

我认为您已经拥有了一个很好的系统,我会提供以下潜在方法来减小ID的大小

[活动/片段名称] - 我个人会放弃这个,因为我通常每个活动/片段使用一个布局文件,所以不会混淆视图应该在哪个活动中。此外,有时我会在多个活动中重复使用某些View部件,并将它们保留相同的ID,以简化查找和交互它们的代码(即可以复制/粘贴或放入Activity的子类中)

[元素类型] - 我使用三个字母缩写表示小部件类型:

  • Edt = EditText
  • Txt = TextView
  • Lbl = 用于标记某物的静态TextView
  • Btn = Button
  • Prg = ProgressBar
  • Lyt = Layout
  • 等等...

[特定名称] - 在这里没有真正的改进,必须尽可能长地描述其用途。


1
感谢@Tim,如果我能留下活动/片段名称,那就最好了。我之所以添加这个,主要是因为我对id查找过程不够理解。 - Warut Surapat
1
你当然可以留下它 =),但我个人倾向于不使用它。 - FoamyGuy

6

你正在过度复杂化事情。只要以你记得住的方式命名即可。ID只需在每个XML中是唯一的(即,您可以有50个不同布局的ID为my_edittext),因为您仅通过单个视图层次结构通过其ID查找视图。


啊,我明白了。感谢@kcoppock,如果需要id仅在单个视图层次结构中唯一,则可以清楚地省略其他块。; D - Warut Surapat
@kcoppock,这会对兄弟片段或嵌套片段造成问题吗? - bcorso
如果您正在从活动中查找片段视图,那么可以这样做。但是,如果您在片段内执行所有视图操作(通常应该如此),那么就不会有问题。 - Kevin Coppock

1
与给任何事物命名一样,我倾向于使用最短的名称来准确描述它。对于布局的ID,只需确保每个ID在您的布局中是唯一的(您可以在不同的布局中重复使用相同的ID)。

0

除非在编码中有资格进行限定,否则请删除片段、活动和类型,因此:

boolean isLoggedIn = false;

android:id="@+id/is_logged_in"

如其他回复中所述,XML 提供了限定符,现在您必须决定是否需要一致性和/或进一步的限定,并且是否适合。您真的需要限定吗?如果您不这样做,那么支持代码会更加困难,无论是您还是其他人。

那么 strings.xml 呢?

使用 frag 或 activity 限定符前缀 id。例如:

<string name="profile_is_logged_in_true">已登录。</string>

<string name="profile_is_logged_in_false">未登录。</string>

另外...

<plurals name="plural_is_logged_in_duration">...

我曾经尝试过:

<string name="profile_isloggedin_false">未登录。</string>

但还没有被说服。这实际上是一个分类问题,现在通过标记在其他学科中得到解决。Java提供了点分隔的命名空间和类型限定符,因此

com.example.android.app.profile.State.isLoggedIn

Android使用像R.string这样的东西 :-) 因此,您除了Java之外还有一些来自Android的额外命名空间。不要忘记您可以拥有多个字符串资源文件,因此可能会有:

res/values/widget_defaults.xml

可能包含一些默认值,例如TextView。真和假字符串应该由复数处理 - 但是示例希望能够帮助,尽管有点牵强。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接