Чем лучше android.R или custom R? - PullRequest
       49

Чем лучше android.R или custom R?

14 голосов
/ 16 августа 2011

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

17 голосов
/ 16 августа 2011

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

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

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

1 голос
/ 16 августа 2011

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

0 голосов
/ 19 августа 2011

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

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

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

0 голосов
/ 16 августа 2011

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

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

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

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

...