Что такое Android-пространство имен app?
Вот пример 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 XML? Доступны ли одинаковые параметры значения для одного и того же атрибута в двух разных пространствах имен (например, app:showAsAction
а также android:showAsAction
).
Из документов:android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
то есть, будет ли строка в вышеприведенном примере означать что-то другое, если бы вместо этого атрибут
android:showAsAction="never"
Похоже, что это может быть своего рода механизм "подкласса", но я не могу найти какую-либо реальную документацию по app
пространство имен из источников Google/Android.
1 ответ
app
Пространство имен не является специфическим для библиотеки, но оно используется для всех атрибутов, определенных в вашем приложении, будь то ваш код или импортируемые вами библиотеки, эффективно создавая единое глобальное пространство имен для пользовательских атрибутов - то есть атрибутов, не определенных системой Android.
В этом случае appcompat-v7
библиотека использует настраиваемые атрибуты, отражающие android:
пространства имен для поддержки предыдущих версий Android (например: android:showAsAction
был добавлен только в API11, но app:showAsAction
(предоставляется как часть вашего приложения) работает на всех уровнях API вашего приложения) - очевидно, с использованием android:showAsAction
не будет работать на уровнях API, где этот атрибут не определен.
Вы можете получить объяснение по этой ссылке
Объявление пространства имен Пространство имен 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] В этом случае считается, что элемент без явного префикса пространства имен не находится ни в каком пространстве имен.
Атрибуты никогда не подчиняются пространству имен по умолчанию. Считается, что атрибут без явного префикса пространства имен не находится ни в каком пространстве имен.