Что такое 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 объявляется с использованием зарезервированного 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] В этом случае считается, что элемент без явного префикса пространства имен не находится ни в каком пространстве имен.

Атрибуты никогда не подчиняются пространству имен по умолчанию. Считается, что атрибут без явного префикса пространства имен не находится ни в каком пространстве имен.

Другие вопросы по тегам