これは私がres/menu/main.xml
ファイルから見たapp
名前空間の例です。
<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名前空間ですか? 2つの異なる名前空間に配置されている同じ属性に対して同じ値オプションが使用可能か(例:app:showAsAction
とAndroid:showAsAction
)。
のドキュメントから :Android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
つまり、上記の例の行は、属性が代わりに次のようになっている場合は別の意味になります。
Android:showAsAction="never"
それはある種の「サブクラス化」メカニズムかもしれないようにほとんど見えますが、私はGoogle/Androidのソースからapp
名前空間に関する実際のドキュメントを見つけることができないようです。
app
名前空間はライブラリに固有ではありませんが、コードまたはインポートするライブラリによってアプリで定義されたすべての属性に使用され、カスタム属性の単一のグローバル名前空間を効果的に作成します。 Androidシステムによって定義されます。
この場合、appcompat-v7
ライブラリーは、Androidの以前のバージョンをサポートするためにAndroid:
名前空間のミラーリングするカスタム属性を使用します(例:Android:showAsAction
はAPI11でのみ追加され、ただし、app:showAsAction
(アプリケーションの一部として提供されます)は、アプリが行うすべてのAPIレベルで機能します)-Android:showAsAction
を使用しても、その属性が定義されていないAPIレベルでは機能しません。
このリンクからいくつかの説明を得ることができます
名前空間の宣言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]その場合、明示的な名前空間プレフィックスのない要素は、どの名前空間にも含まれていないと見なされます。
属性は、デフォルトのネームスペースの影響を受けません。明示的な名前空間プレフィックスのない属性は、どの名前空間にも含まれていないと見なされます。