web-dev-qa-db-fra.com

Qu'est-ce que l'espace de noms XML 'app' Android _?

Voici un exemple de l'espace de noms app que j'ai vu à partir d'un fichier 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>

A quoi sert l'espace de nom app? Est-ce un espace de noms XML "standard" Android? Les mêmes options de valeur sont-elles disponibles pour le même attribut placé dans deux espaces de nom différents (par exemple, app:showAsAction et Android:showAsAction).

À partir du docs : Android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

en d'autres termes, la ligne dans l'exemple ci-dessus aurait-elle une autre signification si l'attribut était à la place:

Android:showAsAction="never"

Il semble presque qu'il s'agisse d'un mécanisme de "sous-classement", mais je n'arrive pas à trouver de documentation réelle sur l'espace de noms app à partir de sources Google/Android.

155
coder123

L'espace de nom app n'est pas spécifique à une bibliothèque, mais il est utilisé pour tous les attributs définis dans votre application, que ce soit par votre code ou par les bibliothèques que vous importez, ce qui permet de créer un seul espace de nom global pour les attributs personnalisés. défini par le système Android.

Dans ce cas, la bibliothèque appcompat-v7 utilise des attributs personnalisés reflétant ceux de l'espace de noms Android: pour prendre en charge les versions précédentes de Android (par exemple: Android:showAsAction n'a été ajouté qu'à l'API11. mais app:showAsAction (fourni avec votre application) fonctionne à tous les niveaux d'API de votre application) - de toute évidence, utiliser Android:showAsAction ne fonctionnerait pas aux niveaux d'API où cet attribut n'est pas défini.

204
ianhanniballake

Vous pouvez obtenir des explications à partir de ce lien

espace de noms XML

Déclaration d'espace de noms Un espace de noms XML est déclaré à l'aide de l'attribut XML réservé xmlns ou xmlns: prefix, dont la valeur doit être un nom d'espace de nom valide.

Par exemple, la déclaration suivante mappe le préfixe "xhtml:" à l'espace de noms XHTML:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

Tout élément ou attribut dont le nom commence par le préfixe "xhtml:" est considéré comme étant dans l'espace de noms XHTML, si cet ancêtre ou l'un de ses ancêtres possède la déclaration d'espace de noms ci-dessus.

Il est également possible de déclarer un espace de noms par défaut. Par exemple:

xmlns = "http://www.w3.org/1999/xhtml"

Dans ce cas, tout élément sans préfixe d'espace de nom est considéré comme appartenant à l'espace de nom XHTML, si cet ancêtre ou un ancêtre possède la déclaration d'espace de nom par défaut ci-dessus.

S'il n'y a pas de déclaration d'espace de nom par défaut dans la portée, le nom de l'espace de nom n'a aucune valeur. [6] Dans ce cas, un élément sans préfixe d'espace de nom explicite est considéré comme n'étant dans aucun espace de nom.

Les attributs ne sont jamais soumis à l'espace de noms par défaut. Un attribut sans préfixe d’espace de nom explicite est considéré comme n’appartenant à aucun espace de nom.

1
KIRPAL SINGH