Что такое пространство приложений Android для Android?
Вот пример пространства имен app
, которое я видел из файла res/menu/main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>
Какую цель выполняет пространство имен app
? Является ли это "стандартным" пространством имен Android для Android? Имеются ли одинаковые параметры значений для одного и того же атрибута, помещенного в два разных пространства имен (например, app:showAsAction
и android:showAsAction
).
Из docs:
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
i.e., будет ли строка в приведенном выше примере означать что-то еще, если атрибут был вместо этого:
android:showAsAction="never"
Похоже, что это может быть какой-то механизм "подкласса", но я не могу найти никакой реальной документации в пространстве имен app
из источников Google/Android.
Ответы
Ответ 1
Пространство имен app
не относится к библиотеке, но используется для всех атрибутов, определенных в вашем приложении, будь то по вашему коду или импортируемым библиотекам, эффективно создавая одно глобальное пространство имен для пользовательских атрибутов - то есть атрибуты не определенная системой android.
В этом случае библиотека appcompat-v7
использует пользовательские атрибуты, зеркалирующие пространства имен android:
для поддержки предыдущих версий андроида (например: android:showAsAction
добавляется только в API11, но app:showAsAction
(предоставляется как часть вашего приложения) работает на всех уровнях API, которые делает ваше приложение) - очевидно, использование android:showAsAction
не будет работать на уровнях API, где этот атрибут не определен.
Ответ 2
Вы можете получить некоторые объяснения по этой ссылке
Пространство имен XML
Объявление пространства имен. Пространство имен XML объявляется с использованием зарезервированного атрибута XML xmlns или xmlns: prefix, значением которого должно быть допустимое имя пространства имен.
Например, следующее объявление отображает префикс "xhtml:" в пространство имен XHTML:
XMLNS: = XHTML "http://www.w3.org/1999/xhtml"
Любой элемент или атрибут, чье имя начинается с префикса "xhtml:", считается находящимся в пространстве имен XHTML, если он или его предок имеют вышеуказанное объявление пространства имен.
Также возможно объявить пространство имен по умолчанию. Например:
XMLNS = "http://www.w3.org/1999/xhtml"
В этом случае любой элемент без префикса пространства имен считается находящимся в пространстве имен XHTML, если он или его предок имеют вышеуказанное объявление пространства имен по умолчанию.
Если в области нет объявления пространства имен по умолчанию, имя пространства имен не имеет значения. [6] В этом случае считается, что элемент без явного префикса пространства имен не находится ни в одном пространстве имен.
Атрибуты никогда не подчиняются пространству имен по умолчанию. Атрибут без явного префикса пространства имен считается не входящим ни в какое пространство имен.