Подтвердить что ты не робот

Hardcoded string "row three", следует использовать ресурс @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 " и то же самое для остальных предупреждений. Любое предложение?

4b9b3361

Ответ 1

Неправильная практика заключается в жестких кодовых строках в ваших файлах макета. Вы должны добавить их в строковый файл ресурсов, а затем ссылаться на них из макета.

Это позволяет обновлять каждое появление слова "Желтый" во всех макетах одновременно, просто редактируя файл strings.xml.

Это также чрезвычайно полезно для поддержки нескольких языков, так как отдельный файл strings.xml может использоваться для каждого поддерживаемого языка.

Пример: Файл XML сохраняется при res/values ​​/strings.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" />

Аналогично цвета должны храниться в цветах .xml, а затем ссылаться с помощью @color/color_name

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

Ответ 2

Вы должны создать их под strings.xml

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

Вы должны заменить и ссылаться как на

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

Не используйте @strings, даже если файл XML говорит string.xml, иначе он не будет работать.

Ответ 3

Неправильная практика заключается в том, чтобы жестко закодировать строки в файлы/код макета. Вы должны добавить их в строковый файл ресурсов, а затем ссылаться на них из своего макета.

  • Это позволяет обновлять каждое вхождение одного и того же слова во всех
    в то же время, просто отредактировав файл strings.xml.
  • Это также чрезвычайно полезно для supporting multiple languages как отдельный strings.xml file может использоваться для каждого поддерживаемого языка
  • фактическая точка системы @string, пожалуйста, прочитайте localization. Это позволяет легко находить текст в ваше приложение, а затем перевести его.
  • Строки могут быть легко интернационализированы, что позволяет использовать приложение до support multiple languages with a single application package file (АПК).

Преимущества

  • Допустим, вы использовали ту же строку в 10 разных местах кода. Что, если вы решите изменить его? Вместо того, чтобы искать, где все это был использован в проекте, который вы просто меняете один раз, и изменения отражается везде в проекте.
  • Строки не загромождают ваш код приложения, оставляя его понятным и  легко поддерживать.

Ответ 4

Вы можете перейти в режим разработки и выбрать "Исправить" в нижней части предупреждения. Затем появится всплывающее окно (похоже, что он собирается зарегистрировать новую строку) и voila, ошибка исправлена.

Ответ 5

Хорошей практикой является написание текста внутри 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" />