Что лучше 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