web-dev-qa-db-ja.com

ハードコードされた文字列「row 3」、@ stringリソースを使用する必要があります

私は初心者Android開発者です。この線形レイアウトをEclipseで実行しようとしていました:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">

  <LinearLayout
      Android:orientation="horizontal"
      Android:layout_width="fill_parent"
      Android:layout_height="fill_parent"
      Android:layout_weight="1">
      <TextView
          Android:text="red"
          Android:gravity="center_horizontal"
          Android:background="#aa0000"
          Android:layout_width="wrap_content"
          Android:layout_height="fill_parent"
          Android:layout_weight="1"/>
      <TextView
          Android:text="green"
          Android:gravity="center_horizontal"
          Android:background="#00aa00"
          Android:layout_width="wrap_content"
          Android:layout_height="fill_parent"
          Android:layout_weight="1"/>
      <TextView
          Android:text="blue"
          Android:gravity="center_horizontal"
          Android:background="#0000aa"
          Android:layout_width="wrap_content"
          Android:layout_height="fill_parent"
          Android:layout_weight="1"/>
      <TextView
          Android:text="yellow"
          Android:gravity="center_horizontal"
          Android:background="#aaaa00"
          Android:layout_width="wrap_content"
          Android:layout_height="fill_parent"
          Android:layout_weight="1"/>
  </LinearLayout>

  <LinearLayout
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:layout_weight="1">
    <TextView
        Android:text="row one"
        Android:textSize="15pt"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"/>
    <TextView
        Android:text="row two"
        Android:textSize="15pt"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"/>
    <TextView
        Android:text="row three"
        Android:textSize="15pt"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"/>
    <TextView
        Android:text="row four"
        Android:textSize="15pt"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"/>
  </LinearLayout>

</LinearLayout>

そして、私は気づいた:
1)Android:text="Yellow"の下の黄色の線
2)Android:text="row four"の下の黄色の線
三角形の警告は[I18N] Hardcoded string "Yellow", should use @string resource "であり、残りの警告についても同じです。提案はありますか?

54
user941015

文字列をレイアウトファイルにハードコーディングすることはお勧めできません。それらを文字列リソースファイルに追加し、レイアウトから参照する必要があります。

これにより、strings.xmlファイルを編集するだけで、すべてのレイアウトでWord "Yellow"のすべての出現を同時に更新できます。

また、サポートされている言語ごとに個別のstrings.xmlファイルを使用できるため、複数の言語のサポートにも非常に役立ちます。

例:res/values/strings.xmlに保存されたXMLファイル:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="yellow">Yellow</string>
</resources>

このレイアウトXMLは、文字列をビューに適用します。

<TextView Android:layout_width="fill_parent"
          Android:layout_height="wrap_content"
          Android:text="@string/yellow" />

同様に、色はcolors.xmlに保存し、@ color/color_nameを使用して参照する必要があります

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="Black">#000000</color>
</resources>
119
Kuffs

これらをstrings.xmlの下に作成する必要があります

<string name="close">Close</string>    

このように置き換えて参照する必要があります

Android:text="@string/close"/>

XMLファイルでstrings.xmlが指定されている場合でも、@ stringsを使用しないでください。使用しないと機能しません。

13
Hanson So

レイアウトファイル/コードに文字列をハードコードすることはお勧めできません。それらを文字列リソースファイルに追加し、レイアウトから参照する必要があります。

  1. これにより、すべての同じ単語のすべての出現を更新することができます
    レイアウトを同時に編集するだけで、strings.xmlファイルを編集できます。
  2. また、サポートされている言語ごとに個別のsupporting multiple languagesを使用できるため、strings.xml fileにとっても非常に便利です。
  3. @stringシステムを持つ実際のポイントは、 localization ドキュメンテーションを読んでください。アプリ内のテキストを簡単に見つけて、後で翻訳することができます。
  4. 文字列は簡単に国際化でき、アプリケーションでsupport multiple languages with a single application package file(APK)を使用できます。

利点

  • コード内の10の異なる場所で同じ文字列を使用したとしましょう。それを変更することにした場合はどうなりますか?プロジェクトで使用されているすべての場所を検索する代わりに、一度変更するだけで、プロジェクトのすべての場所に変更が反映されます。
  • 文字列はアプリケーションコードを煩雑にせず、明確で維持しやすくなります。
10
Xar E Ahmer

デザインモードに移動し、警告の下部にある[修正]を選択できます。その後、ポップアップが表示され(新しい文字列を登録するようです)、出来上がり、エラーが修正されます。

3
Keith Peñas

String.xml内にテキストを書くことをお勧めします

例:

String.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="yellow">Yellow</string>
</resources>

および内部レイアウト:

<TextView Android:layout_width="fill_parent"
      Android:layout_height="wrap_content"
      Android:text="@string/yellow" />
0
SahdevRajput74