我不确定有没有人遇到过这个问题,但对我来说这是一个很大的烦恼。
在安卓中如何为xml元素设置id?
目前,我使用这种模式设置id: [活动/片段名称][元素类型][具体名称]。例如,如果我有一个用于在LoginActivity中保存电子邮件的EditText,我将给它一个id 'LoginEditTextEmail'。
我面临的问题是,使用这种方法,id 往往变得非常长。
你如何设置id?最佳实践是什么?
使用具有描述性的名称是理想的(与任何编程语言中的变量名称相同)。
我认为您已经拥有了一个很好的系统,我会提供以下潜在方法来减小ID的大小
[活动/片段名称] - 我个人会放弃这个,因为我通常每个活动/片段使用一个布局文件,所以不会混淆视图应该在哪个活动中。此外,有时我会在多个活动中重复使用某些View部件,并将它们保留相同的ID,以简化查找和交互它们的代码(即可以复制/粘贴或放入Activity的子类中)
[元素类型] - 我使用三个字母缩写表示小部件类型:
[特定名称] - 在这里没有真正的改进,必须尽可能长地描述其用途。
你正在过度复杂化事情。只要以你记得住的方式命名即可。ID只需在每个XML中是唯一的(即,您可以有50个不同布局的ID为my_edittext
),因为您仅通过单个视图层次结构通过其ID查找视图。
除非在编码中有资格进行限定,否则请删除片段、活动和类型,因此:
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
。真和假字符串应该由复数处理 - 但是示例希望能够帮助,尽管有点牵强。