14

当我开始开发 android 应用程序时,我倾向于在任何需要的地方定义自定义 R 值,特别是在布局文件中。例如:

findViewById(R.id.customerName).setText(customer.getName())

与布局:

<TextView android:text="TextView" android:id="@id/customerName"
    android:layout_height="wrap_content" android:layout_width="fill_parent" />

现在我意识到,使用它可能会更好android.R

findViewById(android.R.id.text1).setText(customer.getName())

与布局:

<TextView android:text="TextView" android:id="@android:id/text1"
    android:layout_height="wrap_content" android:layout_width="fill_parent" />

你遵循什么惯例?各自的优点和缺点是什么?

4

4 回答 4

17

android.R旨在利用操作系统内置的资源。

操作系统附带了许多图像/布局/等......您可以使用它们来参考android.R

如果您要引用自己创建的资源,通常会使用R.,并且在大多数情况下,我建议尽量远离内置资源,因为它们会更改版本。

于 2011-08-16T18:11:40.320 回答
1

风俗。系统提供的 ID 存在在代码中引用项目中不存在的资源的风险。如果有相应的资源 - 可绘制的、视图、布局或你有什么,海关 I​​D 就存在。

于 2011-08-16T18:12:43.543 回答
0

框架 id与布局中的自定义 id没有太大的优势或劣势。

使用框架标识符的优点:

  • 避免创建更多标识符。在 apk 中保存一个字段(并且存在 apk 大小限制)。
  • 必须在某些情况下使用,例如ListActivity

使用框架标识符的缺点:

  • 不要提供描述性名称

在这两种实践中

  • 该代码将在未来工作
  • 缺失的引用在运行时被发现,并在编译时隐藏

我认为 SDK 中的示例可以帮助我做出决定,但(你猜怎么着?)它没有。Notepad 和 LunarLander 应用程序使用android.R.id视图标识符,而 ApiDemos 项目使用自定义标识符。

混合两种方法的 GestureBuilder 的最佳实践?(@+id/addButton@android:id/empty)

IHMO,HelloActivity 和 JetBoy 定义的更糟糕的做法@+id/text @+id/Button01......这不是描述性的,可以用 (@andoid:id/button1@+id/startButton)代替

于 2011-08-18T22:00:17.083 回答
-1

您需要自己的 R.java 类,因为它包含对所有资源(布局、图像、字符串等)的引用

如果您想获得对 ID 为“myView”的 View 的引用,您将使用 R.id.myView。如果您想获得对内置 Android 资源的引用,您可以使用 android.R.id.text

看看下面的页面:

http://developer.android.com/guide/topics/resources/accessing-resources.html

于 2011-08-16T18:12:52.033 回答