@id/
と@+id/
の違いは何ですか?
@+id/
では、プラス記号+
は新しいリソース名を作成してR.Java
ファイルに追加するように指示しますが、@id/
について ID
:のドキュメントから、AndroidリソースID
を参照するときは、プラス記号は必要ありませんが、Androidパッケージの名前空間を追加する必要があります。
Android:id="@Android:id/list"
しかし下の画像では、Eclipseはいかなる@Android:id/
も示唆していません。
@id/
と@Android:id/
は同じですか?
Android resources
を参照します。これはAndroidシステムで@Android:id/..
で既に定義されていますが、プロジェクトで定義/作成したリソースにアクセスするには、@id/..
を使用します
詳細
チャットの説明に従って、次のような問題があると言いました。
Android:id="@id/layout_item_id"
を使用すると機能しません。代わりに@+id/
が機能するので、ここでの違いは何ですか?それが私の最初の質問でした。
まあ、それはコンテキストに依存します。Android:id
のXML属性を使用している場合、新しいIDを指定し、パーサーに新しいエントリを作成するよう指示します(またはビルダーと呼びます) R.Java
。したがって、+
記号を含める必要があります。
Android:layout_below="@id/myTextView"
のような他のケースでは、すでに作成されたIDを参照しているため、パーサーはこれをR.Java
で作成されたIDにリンクします。
再度詳細
チャットで言ったように、Android:layout_below="@id/myTextView"
は、使用中の要素の後に書き込まれた場合、ID myTextView
の要素を認識しないことに注意してください。
+記号は、idをリソースIDのリストに追加するためのショートカットです。それ以外の場合は、このようなXMLファイルにそれらを含める必要があります。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_logo" type="id"/>
</resources>
レイアウトファイルに次のような参照があることがあります。
<listview id="@+id/Android:list">
そして
<listview id="@Android:id/list">
違いは何ですか?
..あなたが尋ねてくれてうれしいです☺
@+id/foo
は、アプリケーションの名前空間にfooという名前のIDを作成していることを意味します。 @id/foo
を使ってそれを参照することができます。 @Android:id/foo
は、Android名前空間で定義されているIDを参照していることを意味します。
「+」は、シンボルが存在しない場合は作成することを意味します。 Android:シンボルを参照するときには必要ありません(そして使用するべきではありません)。これらは既にプラットフォームによって定義されていて、そのネームスペースで自分で作成することはできません。
この名前空間はフレームワークの名前空間です。例えば、フレームワークが見つけることを期待しているIDなので、@Android:id/list
を使用する必要があります。(フレームワークはAndroid名前空間のIDについてのみ認識します。)
要するに
Android:id="@+id/my_button"
+ idプラス記号はAndroidにResourcesに新しいIDを追加または作成するように伝えます。
しながら
Android:layout_below="@id/my_button"
それはすでに生成されたIDを参照するのに役立ちます..
リソースタイプの前のプラス記号(
+
)は、初めてリソースIDを定義するときにだけ必要です。アプリをコンパイルすると、SDKツールはID名を使用して、プロジェクトのR.Java
ファイルにEditText
要素を参照する新しいリソースIDを作成します。この方法でリソースIDを1回宣言すると、そのIDへの他の参照にはプラス記号は必要ありません。プラス記号の使用は、新しいリソースIDを指定する場合にのみ必要であり、文字列やレイアウトなどの具体的なリソースには必要ありません。リソースオブジェクトの詳細については、サイドボックスを参照してください。
投稿者: https://developer.Android.com/training/basics/firstapp/building-ui.html
それはとても簡単です:
"@ + ..." - 新規作成
"@ ..." - 既存のリンク
出典:https://developer.Android.com/guide/topics/resources/layout-resource.html#idvalue
開発者ガイド から:
Android:id="@+id/my_button"
文字列の先頭にあるアットマーク(@
)は、XMLパーサーが残りのID文字列を解析して展開し、それをIDリソースとして識別する必要があることを示します。プラス記号(+
)は、これが(R.Java
ファイルで)作成され、私たちのリソースに追加されなければならない新しいリソース名であることを意味します。 Androidフレームワークによって提供される他のIDリソースがいくつかあります。 AndroidリソースIDを参照するときは、プラス記号は必要ありませんが、Android
パッケージの名前空間を追加する必要があります。
Android:id="@Android:id/empty"
Eclipseにはバグがあります。新しい@+id/..
を作成しただけでは、プロジェクトをクリーンビルドしてもすぐにR.Javaファイルに追加されない場合があります。解決策はEclipseを再起動することです。
開発者の中には、自分の構文に問題があると誤解して、実際にデバッグするものが何もない場合でもデバッグを試みることがあるため、開発者を混乱させる可能性があるためです。
@id/
と@Android:id/
は同じではありません。
アプリケーションでIDを参照する@id/
、Androidプラットフォームでアイテムを参照する@Android:id/
。
Eclipseは間違っています。
AndroidはXMLファイルの値が格納されているリソースと呼ばれるいくつかのファイルを使用します。
XMLオブジェクトに@ id /を使用すると、すでにvaluesファイルに登録されているidを参照しようとしています。一方、@ + id /を使用すると、 '+'記号で示されているように、新しいIDが値ファイルに登録されます。
お役に立てれば :)。
ビューアイテムが同じ操作を実行する場合、複数の@ id/fooのコンパイル中にR.Javaファイルは1つの列挙しか作成しないので、どのレイアウトの各エントリにも@ idを使用できます。たとえば、各ページに同じ操作を実行する保存ボタンがある場合は、各レイアウトでAndroid:id = "@ + id/button_save"を使用します。 R.Javaファイルにはbutton_saveのエントリが1つだけあります。
@+id
と@id
の違いは以下のとおりです。
@+id
は、R.Java
ファイルでビューのIDを作成するために使用されます。@id
はR.Javaファイルでビュー用に作成されたIDを参照するために使用されます。@+id
をAndroid:id=""
と一緒に使用しますが、idが作成されず、作成される前にそれを参照している場合(前方参照).
その場合、idを作成するために@+id
を使用し、ビューを定義しながらそれを参照する必要があります。
以下のコードを参照してください。
<RelativeLayout>
<TextView
Android:id="@+id/dates"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_toLeftOf="@+id/spinner" />
<Spinner
Android:id="@id/spinner"
Android:layout_width="96dp"
Android:layout_height="wrap_content"
Android:layout_below="@id/dates"
Android:layout_alignParentRight="true" />
</RelativeLayout>
上記のコードでは、Spinner @+id/spinner
のidは他のビューで作成され、スピナーを定義している間に上記で作成されたidを参照しています。
そのため、ビューが作成される前にビューを使用している場合は、IDを作成する必要があります。
Androidにおける“@+id/”
と“@id/”
の違い
最初のものは特定のuiコンポーネントのID
を作成するために使用され、他のものは特定のコンポーネントを参照するために使用されます