アンドロイドを使い始めたばかりで、約5つのレイアウトファイルが完成しました。ただし、@idと@+ idを同じ意味で使用していることに気づきましたが、この2つの正確な違いはわかりません。
5 に答える
@+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
を意味します。Button
Button
他のすべての回答は、この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を生成するように注意してください。
android:id = "@ + id / my_button"
+ id Plus singは、Androidにリソースに新しいIDを追加または作成するように指示します。
android:layout_below = "@ id / my_button"
すでに生成されたIDを参照するのに役立ちます。
+記号を使用する必要がある場合があります。たとえば、使用する<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').
図書館とのプロジェクトで私に起こりました。
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”