web-dev-qa-db-ja.com

Androidの「@ id /」と「@ + id /」の違い

@id/@+id/の違いは何ですか?

@+id/では、プラス記号+は新しいリソース名を作成してR.Javaファイルに追加するように指示しますが、@id/について ID :のドキュメントから、AndroidリソースIDを参照するときは、プラス記号は必要ありませんが、Androidパッケージの名前空間を追加する必要があります。

Android:id="@Android:id/list"

しかし下の画像では、Eclipseはいかなる@Android:id/も示唆していません。

Image showing the suggestion for the @/id and @+/id

@id/@Android:id/は同じですか?

430
Vikas Patidar

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の要素を認識しないことに注意してください。

343
Aman Alam

+記号は、idをリソースIDのリストに追加するためのショートカットです。それ以外の場合は、このようなXMLファイルにそれらを含める必要があります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="my_logo" type="id"/>
</resources>
84
schwiz

レイアウトファイルに次のような参照があることがあります。

<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についてのみ認識します。)

この ソースから完全にコピーされた

42
Tanmay Mandal

要するに

Android:id="@+id/my_button"

+ idプラス記号はAndroidにResourcesに新しいIDを追加または作成するように伝えます。

しながら

Android:layout_below="@id/my_button"

それはすでに生成されたIDを参照するのに役立ちます..

36
Xar E Ahmer

リソースタイプの前のプラス記号(+)は、初めてリソースIDを定義するときにだけ必要です。アプリをコンパイルすると、SDKツールはID名を使用して、プロジェクトのR.JavaファイルにEditText要素を参照する新しいリソースIDを作成します。この方法でリソースIDを1回宣言すると、そのIDへの他の参照にはプラス記号は必要ありません。プラス記号の使用は、新しいリソースIDを指定する場合にのみ必要であり、文字列やレイアウトなどの具体的なリソースには必要ありません。リソースオブジェクトの詳細については、サイドボックスを参照してください。

投稿者: https://developer.Android.com/training/basics/firstapp/building-ui.html

9
Nguyen

それはとても簡単です:

"@ + ..." - 新規作成

"@ ..." - 既存のリンク

出典:https://developer.Android.com/guide/topics/resources/layout-resource.html#idvalue

7
Fortran

開発者ガイド から:

Android:id="@+id/my_button"

文字列の先頭にあるアットマーク(@)は、XMLパーサーが残りのID文字列を解析して展開し、それをIDリソースとして識別する必要があることを示します。プラス記号(+)は、これが(R.Javaファイルで)作成され、私たちのリソースに追加されなければならない新しいリソース名であることを意味します。 Androidフレームワークによって提供される他のIDリソースがいくつかあります。 AndroidリソースIDを参照するときは、プラス記号は必要ありませんが、Androidパッケージの名前空間を追加する必要があります。

Android:id="@Android:id/empty"

6
Jeff Axelrod

Eclipseにはバグがあります。新しい@+id/..を作成しただけでは、プロジェクトをクリーンビルドしてもすぐにR.Javaファイルに追加されない場合があります。解決策はEclipseを再起動することです。

開発者の中には、自分の構文に問題があると誤解して、実際にデバッグするものが何もない場合でもデバッグを試みることがあるため、開発者を混乱させる可能性があるためです。

4
josephus

@id/@Android:id/は同じではありません。

アプリケーションでIDを参照する@id/、Androidプラットフォームでアイテムを参照する@Android:id/

Eclipseは間違っています。

4
Olegas

AndroidはXMLファイルの値が格納されているリソースと呼ばれるいくつかのファイルを使用します。

XMLオブジェクトに@ id /を使用すると、すでにvaluesファイルに登録されているidを参照しようとしています。一方、@ + id /を使用すると、 '+'記号で示されているように、新しいIDが値ファイルに登録されます。

お役に立てれば :)。

4
Tanuj Nayak

ビューアイテムが同じ操作を実行する場合、複数の@ id/fooのコンパイル中にR.Javaファイルは1つの列挙しか作成しないので、どのレイアウトの各エントリにも@ idを使用できます。たとえば、各ページに同じ操作を実行する保存ボタンがある場合は、各レイアウトでAndroid:id = "@ + id/button_save"を使用します。 R.Javaファイルにはbutton_saveのエントリが1つだけあります。

1
TheChrisONeil

@+id@idの違いは以下のとおりです。

  • @+idは、R.JavaファイルでビューのIDを作成するために使用されます。
  • @idはR.Javaファイルでビュー用に作成されたIDを参照するために使用されます。

@+idAndroid: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を作成する必要があります。

1
Kunal Sale

Androidにおける“@+id/”“@id/”の違い

最初のものは特定のuiコンポーネントのIDを作成するために使用され、他のものは特定のコンポーネントを参照するために使用されます

1
Gurpreet Singh