しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

AndroidのXMLのIDの+について調べる

Androidアプリ開発で出てくるIDの+の意味について調べてみました。

<EditText android:id="@+id/editText" />

調べた所+を付けるのはIDを自動定義するためのようです。
+なしだと参照するだけなのですが、+ありだと新規定義&参照してくれます。

参考にしたのは下記事です。

android - @+id/とはなんですか? - スタック・オーバーフロー

実際にプラスを取るとエラーになります。

<EditText android:id="@id/editText" />

エラー内容は下のように「IDが見つからない」というものです。

error: resource id/editText (aka com.example.myapp:id/editText) not found.

IDが見つからないと言われたので試しに自分で定義してみました。
値は適当な数字を入れています。

<resources>
    <id name="editText">347284929378</id>
</resources>

実行すると下のようなエラーになりました。
どうやらIDは空かリソースの参照にする必要があるようです。

<id> inner element must either be a resource reference or empty.

空にしたら無事に動かすことができました。
先程のレイアウト側で置きていた「IDがない」というエラーもおきなくなりました。

<resources>
    <id name="editText" />
</resources>

上記のようにidを定義した状態で+idを使ってもエラーにはならないようです。

<EditText android:id="@+id/editText" />

それと複数箇所でIDの定義をすると警告が出ます。

<EditText android:id="@+id/editText" />
<EditText android:id="@+id/editText" />

警告内容は下のとおりです。

Duplicate id @+id/cbDrink, already defined earlier in this layout

こちらですが片方の+を取れば警告が出なくなりました。

<EditText android:id="@+id/editText" />
<EditText android:id="@id/editText" />