Wat is de ‘app’ Android XML-naamruimte?

Hier is een voorbeeld van de app-naamruimte die ik heb gezien in een res/menu/main.xml-bestand

<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>

Waarvoor dient de appnaamruimte? Is het een “standaard” Android XML-naamruimte? Zijn dezelfde waarde-opties beschikbaar voor hetzelfde attribuut in twee verschillende naamruimten (bijv. app:showAsActionen android:showAsAction).

Van de docs:
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

d.w.z. zou de regel in het bovenstaande voorbeeld iets anders betekenen als het attribuut in plaats daarvan was:

android:showAsAction="never"

Het lijkt bijna alsof het een soort “subclassing”-mechanisme is, maar ik kan geen echte documentatie vinden over de app-naamruimte van Google/Android-bronnen.


Antwoord 1, autoriteit 100%

De app-naamruimte is niet specifiek voor een bibliotheek, maar wordt gebruikt voor alle kenmerken die in uw app zijn gedefinieerd, zowel door uw code als door bibliotheken die u importeert, waardoor in feite één algemene naamruimte voor aangepaste attributen – dwz attributen die niet zijn gedefinieerd door het Android-systeem.

In dit geval gebruikt de appcompat-v7-bibliotheek aangepaste kenmerken die de android:-naamruimten weerspiegelen om eerdere versies van Android te ondersteunen (bijvoorbeeld: android:showAsActionis alleen toegevoegd in API11, maar app:showAsAction(wordt geleverd als onderdeel van uw applicatie) werkt op alle API-niveaus van uw app) – uiteraard met behulp van de android:showAsActionzou niet werken op API-niveaus waar dat kenmerk niet is gedefinieerd.


Antwoord 2

Je kunt uitleg krijgen via deze link

XML-naamruimte

Naamruimtedeclaratie
Een XML-naamruimte wordt gedeclareerd met het gereserveerde XML-attribuut xmlns of xmlns:prefix, waarvan de waarde een geldige naamruimtenaam moet zijn.

Bijvoorbeeld, de volgende declaratie wijst het voorvoegsel “xhtml:” toe aan de XHTML-naamruimte:

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

Elk element of attribuut waarvan de naam begint met het voorvoegsel “xhtml:” wordt beschouwd als in de XHTML-naamruimte, als het of een voorouder de bovenstaande naamruimtedeclaratie heeft.

Het is ook mogelijk om een ​​standaard naamruimte te declareren. Bijvoorbeeld:

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

In dit geval wordt elk element zonder naamruimteprefix geacht in de XHTML-naamruimte te zitten, als het of een voorouder de bovenstaande standaardnaamruimtedeclaratie heeft.

Als er geen standaard naamruimtedeclaratie in het bereik is, heeft de naamruimtenaam geen waarde.[6] In dat geval wordt een element zonder een expliciet naamruimtevoorvoegsel beschouwd als niet in een naamruimte.

Kenmerken zijn nooit onderhevig aan de standaard naamruimte. Een attribuut zonder een expliciet naamruimtevoorvoegsel wordt geacht niet in een naamruimte te staan.

Other episodes