ここから本文です

Androidアプリ開発にEclipseを利用しています。@stringに関して、@の使い方が不...

javachipfrappechinoさん

2012/9/2116:24:53

Androidアプリ開発にEclipseを利用しています。@stringに関して、@の使い方が不明です。

Eclipseのバージョンは JUNO です。
Andoroid 2.3.3 向けにJavaScriptで開発をしております。

色々とサイトをみて、開発環境を整え、
エミュレーター画面上に ”Hell World” と表示することは出来ました。

で、次にボタンを設置して、ボタンの名前を ”Hello” に 変更しましたが

[I18N] Hardcoded string "Hello", should use @string resource

と、警告が出ます。
こちらがソースです。

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/textView1"
android:layout_marginLeft="34dp"
android:layout_marginTop="32dp"
android:gravity="center_vertical|center_horizontal|bottom|right"
android:text="Hello" />

この状態でも、ボタンには正しく Hello と表示されています。


android:text="Hello" /> 最終行のこの部分を、"@string/Hello" に変更すると
警告は無くなりますが、ボタンにも @string/Hello と表示されてしまいます。

よくよく見てみると、Textviewの方も @+id/textView1

となっていることに気が付きました。

そこで質問なのですが、この @~ というのは何の役割を果たしているのでしょうか?
アンドロイド開発のサイトをいくつか見て回っても、@~に関する記述はありませんでした。

ご教示頂きたくお願いします。

もしくは、オススメの書籍や、サイトでも結構です。
よろしくお願いいたします。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
4,895
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

niikoujpさん

2012/9/2118:05:00

私も初心者なので、うまく説明できるかどうかわかりませんが。
例えば、
android:text="@string/Hello"
とすると、
「パッケージエクスプローラー」の

「values」フォルダ

「strings.xml」ファイル内の

「Hello」項目の値を参照する事になります。

「@string/Hello」と表示されてしまうのは、
「strings.xml」ファイル内に「Hello」項目を作成していないからだと思います。
何となく他の言語で言う、「定数」に近いものかと思いますが、
例えば、アプリケーションのタイトル等を、
複数の画面(アクティビティ)に表示している場合、
そのタイトル文字などを変更しようとすると、
普通は、全てのタイトル文字部品に修正をかけなければいけませんが、
strings.xmlファイルに「titile」項目を作って「@string/title」と参照しておけば、
その大本を変更すれば、すべての参照部分が変更されます。
★strings.xmlについて
http://androidhacker.blog94.fc2.com/blog-entry-14.html
※eclipseパッケージエクルプローラーで上記「string.xml」をダブルクリックし、
画面下部の「Resources」タブをクリックする事で、定義された項目を管理する事も出来ます。


また、上記で「values」フォルダ内としましたが、
そのフォルダ内の「strings.xml」を英語版、
別途「values-ja」フォルダを作成し、
そのフォルダ内の「strings.xml」を日本語版としてやる事で、
Androidアプリが自動的に2ヶ国語対応となります。
Android本体のロケーション設定に応じて、表示言語が切り替わります。
★values-ja
http://android.roof-balcony.com/resource/lang/



@+id/textView1
の事ですが、たぶんAndroid内部ではidは整数の数値として扱われているはずですが、
strings.xmlと同じ様に、レイアウトのxmlで、
分かりやすい様にコントロール名で、参照しているのでは、ないでしょうか。

つまり、@で記述された値は、直接の値では無く、
システムに決められた変数(リソース)を参照しているという意味ではないでしょうか。

★リソースの参照
http://wikiwiki.jp/android/?UI%A5%B3%A5%F3%A5%DD%A1%BC%A5%CD%A5%F3%...

質問した人からのコメント

2012/9/24 17:23:43

降参 ありがとうございました。非常に良くわかりました。
xmlの@string参照を試してみたところ上手く出来ました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。