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

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>

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

À partir des documents : android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

C'est-à-dire, la ligne dans l'exemple ci-dessus signifierait-elle autre chose si l'attribut était à la place:

android:showAsAction="never"

Il semble presque comme il pourrait s'agir d'une sorte de mécanisme de "sous-classement", mais je n'arrive pas à trouver de vraie documentation sur l'espace de noms app à partir de sources Google/Android.

138
demandé sur R. Zagórski 2014-11-01 22:23:29

1 réponses

L'espace de noms 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, créant ainsi un seul espace de noms global pour les attributs personnalisés - c'est-à-dire les attributs non définis par le système android.

Dans ce cas, la bibliothèque appcompat-v7 utilise des attributs personnalisés reflétant les espaces de noms android: pour prendre en charge les versions antérieures d'android (par exemple: android:showAsAction n'a été ajouté que dans API11, mais app:showAsAction (fourni en tant que partie de votre application) fonctionne sur tous les niveaux D'API de votre application) - évidemment, l'utilisation de android:showAsAction ne fonctionnerait pas sur les niveaux D'API où cet attribut n'est pas défini.

178
répondu ianhanniballake 2014-11-01 20:13:06