жестко закодированная строка "строка три", должна использовать ресурс @string - PullRequest
54 голосов
/ 05 января 2012

Я начинающий разработчик Android, я пытался запустить этот линейный макет в затмении:

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

Ответы [ 5 ]

118 голосов
/ 05 января 2012

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

Это позволяет вам обновлять каждое вхождение слова «Желтый» во всех макетах одновременно, просто редактируя файл 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" />

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="Black">#000000</color>
</resources>
11 голосов
/ 24 апреля 2012

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

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

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

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

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

10 голосов
/ 15 июля 2014

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

  1. Это позволяет обновлять каждое вхождение одного и того же слова во всех
    разметках одновременнопросто отредактировав strings.xml файл.
  2. Это также чрезвычайно полезно для supporting multiple languages, поскольку отдельный strings.xml file может использоваться для каждого поддерживаемого языка
  3. фактическая точка наличия @string Система, пожалуйста, прочтите документацию Локализация .Он позволяет легко находить текст в вашем приложении, а затем переводить его.
  4. Строки можно легко интернационализировать, что позволяет вашему приложению support multiple languages with a single application package file (APK).

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

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

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

0 голосов
/ 09 апреля 2018

Хорошей практикой является написание текста внутри 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...