Here is an example of the app namespace that I've seen from a res/menu/main.xml file
<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>
What purpose does the app namespace serve? Is it a "standard" Android XML namespace? Are the same value options available for the same attribute placed in two different namespaces (e.g. app:showAsAction and android:showAsAction).
From the docs:
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
i.e., would the line in the above example mean something else if the attribute were instead:
android:showAsAction="never"
It almost looks like it might be some sort of "subclassing" mechanism, but I can't seem to find any real documentation on the app namespace from Google/Android sources.
The
appnamespace is not specific to a library, but it is used for all attributes defined in your app, whether by your code or by libraries you import, effectively making a single global namespace for custom attributes - i.e., attributes not defined by the android system.In this case, the
appcompat-v7library uses custom attributes mirroring theandroid:namespace ones to support prior versions of android (for example:android:showAsActionwas only added in API11, butapp:showAsAction(being provided as part of your application) works on all API levels your app does) - obviously using theandroid:showAsActionwouldn't work on API levels where that attribute is not defined.