43

アンドロイドを使い始めたばかりで、約5つのレイアウトファイルが完成しました。ただし、@idと@+ idを同じ意味で使用していることに気づきましたが、この2つの正確な違いはわかりません。

4

5 に答える 5

58

@+idビューの独自のIDを定義するときに使用する必要があります。

正確にドキュメントから:

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

これが実際の例です:

<Button 
   android:id="@+id/start"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
/>

<Button 
   android:id="@+id/check"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_below="@id/start"
/>

ここではIDs、開始と確認の2つを作成しました。次に、アプリケーションで。を使用してそれらに接続できますfindViewById(R.id.start)

そして、これandroid:layout_below="@id/start"は既存のものを参照し、idチェックがidstartで下に配置されることid.startを意味しますButtonButton

于 2012-06-22T17:13:08.897 に答える
5

他のすべての回答は、この1つの小さなことについて言及するのを忘れていました。

@ id /を使用してすでに生成されたAndroidリソースを参照する場合は、参照しているリソースが後でではなく、前に定義されていることを確認してください。

それはこれの代わりです:

<Button 
 android:id="@+id/check"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/start" 
 />
<Button 
 android:id="@+id/start"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 />

これを使って:

<Button 
 android:id="@+id/start"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 />
<Button 
 android:id="@+id/check"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/start"
 />

最初の例では、アクセス後に生成されるリソース@ id/startを参照しています。これはネイティブAndroidの場合は機能しますが、このコードをreact-native、ionic、またはその他のハイブリッドプラットフォームで使用する場合は、リソースが見つからないというエラーが生成されます。

したがって、 @id/として使用する前にリソースIDを生成するように注意してください。

于 2018-10-13T17:06:37.760 に答える
2

android:id = "@ + id / my_button"

+ id Plus singは、Androidにリソースに新しいIDを追加または作成するように指示します。

android:layout_below = "@ id / my_button"

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

于 2015-11-03T03:57:28.090 に答える
2

+記号を使用する必要がある場合があります。たとえば、使用する<include ... />と、含まれているファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    (...)
    app:layout_anchor="@+id/view_pager"
    app:layout_anchorGravity="top|right|end"
 />

追加+しない"@+id/view_pager"と、プロジェクトのビルド中にエラーが発生します。

Error:(9, 24) No resource found that matches the given name (at 'layout_anchor' with value '@id/view_pager').

図書館とのプロジェクトで私に起こりました。

于 2017-02-13T15:24:28.840 に答える
0

Javaでウィジェット(またはコンポーネント)にアクセスしたり、他のウィジェットに依存させたりするには、それを表す一意の値が必要です。その一意の値はandroid:id属性によって提供されます。この属性は、@ + id /のサフィックスとして提供されたidを、他のユーザーがクエリできるようにidリソースファイルに追加します。ツールバーのIDは、次のように定義できます。

android:id=”@+id/toolbar

次のIDは、resファイルでidを検索するfindViewById(…)、または単にR.idディレクトリで追跡でき、問題のビューのタイプを返します。もう1つの@idは、findViewById(…)と同じように動作します—指定されたIDでコンポーネントを検索しますが、レイアウト専用に予約されています。それの最も一般的な使用法は、それが返すコンポーネントに対してコンポーネントを配置することです。

android:layout_below=”@id/toolbar”
于 2017-10-18T00:51:18.467 に答える