13

我不确定以前是否有人遇到过这个问题,但这对我来说是一大痛苦。

你如何给android中的xml元素一个id?

现在,我使用模式[activity/fragment name][element type][specific name]设置 id 。例如,如果我有一个 EditText 来保存在 LoginActivity 中使用的电子邮件,我将提供 id 'LoginEditTextEmail'。

我面临的问题是,使用这种方法,id 通常会以很长的形式结束。

你是怎么设置id的?最佳做法是什么?

4

4 回答 4

12

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

我认为你已经有了一个很好的系统我会提供这些潜在的方法来减少你的 ID 大小

[活动/片段名称] - 我个人会放弃这个,无论如何我倾向于为每个活动/片段使用一个布局文件,因此不会混淆视图的意图是什么活动。有时我会重复使用一些查看多个活动中的小部件,我将使用相同的 ID 保留它们,以便简化查找和交互它们的代码(即可以复制/粘贴或放入 Activity 的子类)

[元素类型] - 我对小部件类型使用 3 个字母的速记:

  • 编辑 = 编辑文本
  • 文本 = 文本视图
  • Lbl = TextView 是静态的,用于标记某些东西
  • Btn = 按钮
  • Prg = 进度条
  • Lyt = 布局
  • ETC...

[具体名称] - 这里没有真正的改进,只要描述它的用途就行。

于 2012-07-20T14:18:00.697 回答
6

You're overcomplicating things. Just name it in whatever way is memorable to you. IDs only have to be unique per XML (i.e. you can have 50 different layouts with the id of my_edittext) since you find a view by it's ID only through a single view hierarchy.

于 2012-07-20T14:13:59.243 回答
1

Much like naming anything, I tend to use the shortest name possible that accurately describes it. In the case of ids for layouts, just make sure each id is unique in your layout (you can reuse the same id in a different layout).

于 2012-07-20T14:14:17.397 回答
0

除非您在编码中限定它们,否则丢弃片段、活动和类型,因此:

boolean isLoggedIn = false;

android:id="@+id/is_logged_in"

正如在其他回复中提到的那样,XML 提供了限定符,现在您必须决定是否需要一致性和/或进一步的限定,以及它是否适合。你真的需要有资格吗?如果你不支持代码,你或其他人会更难吗?

那么呢strings.xml

在 id 前加上 frag 或活动限定符。因此,例如:

<string name="profile_is_logged_in_true">Logged in.</string>

<string name="profile_is_logged_in_false">Not logged in.%</string>

还…

<plurals name="plural_is_logged_in_duration">...

玩过

<string name="profile_isloggedin_false">Not logged in.</string>

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

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

Android 使用类似R.string:-) 的东西所以你有 Java 加上一些来自 Android 的额外命名空间。不要忘记您可以拥有多个字符串资源文件,所以也许:

res/values/widget_defaults.xml

可以包含一些默认值,比如 a TextView。真假字符串应该由复数来处理——但这个例子希望能有所帮助,尽管有点做作。

于 2013-02-10T11:28:42.497 回答