chaîne de caractères codée en dur "rangée trois", doit utiliser la ressource @string

je suis un développeur android débutant , j'essayais d'exécuter cette mise en page linéaire dans 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>

Et, j'ai remarqué :

1) ligne jaune sous android:text="Yellow"

2) ligne jaune sous android:text="row four"

le Triangle warn dit [I18N] Hardcoded string "Yellow", should use @string resource " et de même pour le reste des avertissements.Toute suggestion?

44
demandé sur Gauraw Yadav 2012-01-05 17:30:34

5 réponses

ce n'est pas une bonne pratique de forcer les chaînes de code dans vos fichiers de mise en page. Vous devez les ajouter à un fichier de ressources string et ensuite les référencer à partir de votre mise en page.

ceci vous permet de mettre à jour chaque occurrence du mot "jaune" dans toutes les mises en page en même temps en éditant simplement vos chaînes.fichier xml.

il est aussi extrêmement utile pour supporter plusieurs langues comme chaînes séparées.fichier xml peut être utilisé pour chaque langue.

exemple: Fichier XML enregistré à res/values / strings.xml:

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

Cette mise en page XML applique une chaîne de caractères à Afficher:

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

de même, les couleurs doivent être stockées en couleurs.xml puis référencé en utilisant @color / color_name

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="Black">#000000</color>
</resources>
103
répondu Kuffs 2012-01-05 14:24:32

vous devez les créer sous chaîne.xml

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

vous devez remplacer et faire référence comme ceci

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

N'utilisez pas @strings même si le fichier XML dit strings.xml, sinon cela ne fonctionnera pas.

10
répondu Hanson So 2012-04-24 18:31:50

ce n'est pas une bonne pratique de forcer les chaînes de code dans vos fichiers/ code de mise en page. Vous devez les ajouter à un fichier de ressources string et ensuite les référencer à partir de votre mise en page.

  1. cela vous permet de mettre à jour chaque occurrence du même mot dans tous

    les mises en page dans le même temps, simplement en modifiant votre strings.xml fichier.
  2. il est aussi extrêmement utile pour supporting multiple languages comme un séparée de strings.xml file peut être utilisé pour chaque la langue
  3. le point réel d'avoir le @string système, veuillez lire la localisation documentation. Il vous permet de rechercher du texte dans votre application et plus tard la faire traduire.
  4. les chaînes peuvent être internationalisées facilement, permettant à votre application support multiple languages with a single application package file (APK).

Avantages

  • disons que vous avez utilisé la même chaîne dans 10 endroits différents dans le code. Que faire si vous décidez de modifier? Au lieu de chercher où tout cela a été utilisé dans le projet vous juste le changer une fois et les changements sont reflète partout dans le projet.
  • les chaînes n'encombrent pas votre code d'application, le laissant clair et facile à entretenir.
8
répondu Xar E Ahmer 2015-05-25 14:41:35

vous pouvez passer en mode Design et sélectionner " Fix " au bas de l'avertissement. Puis un pop up apparaîtra (il semble qu'il va enregistrer la nouvelle chaîne) et voilà, l'erreur est corrigée.

1
répondu Keith Peñas 2017-12-31 15:30:26

une bonne pratique est d'écrire du texte dans une chaîne de caractères.xml

exemple:

Chaîne de caractères.xml

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

et à l'intérieur de la mise en page:

<TextView android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="@string/yellow" />
0
répondu SahdevRajput74 2018-04-09 09:15:44