什么是更好的android.R或自定义R?

时间:2011-08-16 18:08:32

标签: android coding-style convention

当我开始开发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 个答案:

答案 0 :(得分:17)

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

您可以使用android.R

引用操作系统附带的许多图像/布局/等等

如果您引用自己创建的资源,大多数总是使用R.,在大多数情况下,我建议您尝试远离内置资源,因为它们会将版本更改为版本

答案 1 :(得分:1)

自定义。系统提供的ID存在在代码中引用项目中不存在的资源的风险。如果有相应的资源,可以使用海关ID - 可绘制的,视图,布局或者你有什么。

答案 2 :(得分:-1)

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

如果要获取对id为“myView”的视图的引用,则可以使用R.id.myView。 如果您想获得对内置Android资源的引用,可以使用android.R.id.text

请看下面的页面:

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

答案 3 :(得分:-1)

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

使用框架标识符的优点:

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

使用框架标识符的缺点:

  • 不提供描述性名称

在两种做法中

  • 代码将在以后使用
  • 缺少引用在运行时被发现,并在编译时被隐藏

我认为SDK中的示例会帮助我做出决定,并且(猜猜是什么?)它没有。 Notepad和LunarLander应用程序使用android.R.id作为视图标识符,而ApiDemos项目使用自定义标识符。

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

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