Что лучше android.R или пользовательские R?

Когда я начал разрабатывать приложения для 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" />

Какую практику вы придерживаетесь? Каковы преимущества и недостатки каждого?

Ответ 1

Нет большого преимущества или недостатка идентификатора фрейма и пользовательского идентификатора в макетах.

Преимущества использования идентификаторов фреймов:

  • Избегайте создания большего количества идентификаторов. Сохраняет одно поле в 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)

Ответ 2

android.R предназначен для использования ресурсов, встроенных в операционную систему.

Существует много изображений/макетов/и т.д., которые поставляются с операционной системой, с которой вы можете просто ссылаться, используя android.R

если вы ссылаетесь на свои собственные ресурсы, которые вы создали, чаще всего используйте R., и в большинстве случаев я рекомендую стараться держаться подальше от встроенных ресурсов, поскольку они меняют версию на версию.

Ответ 3

Пользовательский. Идентификаторы, предоставленные системой, имеют риск обращения в коде к ресурсу, отсутствующему в проекте. Таможенные идентификаторы существуют, если есть соответствующий ресурс - доступный, вид, макет или что у вас есть.

Ответ 4

Вам нужен ваш собственный класс R.java, поскольку он содержит ссылки на все ваши ресурсы (макеты, изображения, строки и т.д.).

Если вы хотите получить ссылку на представление с идентификатором "myView", вы должны использовать R.id.myView. Если вы хотите получить ссылку на встроенные ресурсы Android, вы должны использовать android.R.id.text

Взгляните на следующую страницу:

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