Разница между android: id, android: имена и теги имен в файлах Android XML

Может кто-то уточнить разницу между тегами android:id, android:name и name в файлах Android XML. Кажется, что все это способы ссылок на вещи.

Например, когда у меня есть строковый массив в файле res/values/array.xml, я получаю доступ, используя поле name в определенном массиве, но Javadoc означает это как "ID".

android:id похоже, просто используется в View?

Я что-то упустил или не было бы проще иметь один тег?

Ответ 1

Нет, я не верю, что тебе что-то не хватает. Хотя эти поля называются по-разному, я понимаю, что они оба используются для идентификации/справочных ресурсов. Это специально означает GUI-элементы (представления) в случае android:id и статических ресурсов в случае name.

Чтобы углубиться, я считаю, что атрибут android:id присваивается только представлениям и классам, которые расширяют представление. Это делается для того, чтобы представление можно было программным образом получить из вашего кода с помощью findViewById:

Button myButton = (Button) findViewById(R.id.whatever_id_assigned_to_view)

Это отличается от ресурсов, таких как strings.xml или array.xml, которые идентифицируются просто name, например, следующий пример того, что можно найти в файле strings.xml:

<string name="string_name">Text Resource Here</string>

и доступен с помощью...

getResources().getText(R.string.string_name)

Я предполагаю, что они разделены по организационным причинам. Таким образом, сгенерированный файл ресурсов Android (R.java) содержит идентификаторы, указанные для представлений в R.id, идентификаторы строк, содержащиеся в R.string, идентификаторы массивов в R.array и т.д.