1. ホーム
  2. android

[解決済み] Android XML 名前空間 'app' とは何ですか?

2022-04-23 20:19:32

質問

以下はその例です。 app の名前空間から見たことがあります。 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>

どのような目的で app namespace serve? Android XMLの "標準 "名前空間なのか?異なる2つの名前空間に配置された同じ属性に対して、同じ値のオプションが利用可能か(例. app:showAsActionandroid:showAsAction ).

より 諸注意 : android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]

つまり、上の例の行は、もし属性が代わりになっていたら、別の意味になるのだろうか。

android:showAsAction="never"

これは、ある種のサブクラス化メカニズムであるように見えますが、このメソッドに関する実際のドキュメントを見つけることができません。 app の名前空間は、Google/Androidのソースにあります。

解決方法は?

その app 名前空間はライブラリに特化したものではありませんが、あなたのコードやインポートしたライブラリに関わらず、アプリで定義されたすべての属性に使用され、カスタム属性、つまりアンドロイドシステムで定義されていない属性のために事実上単一のグローバル名前空間が作られるのです。

この場合 appcompat-v7 ライブラリは android: 名前空間のものは、以前のバージョンのandroidをサポートするために(例えば。 android:showAsAction はAPI11で初めて追加されましたが app:showAsAction (アプリケーションの一部として提供されるため) すべての API レベルで動作します。 android:showAsAction は、その属性が定義されていないAPIレベルでは動作しないでしょう。