web-dev-qa-db-fra.com

chaîne codée en dur "ligne trois", devrait utiliser la ressource @string

Je suis un développeur Android débutant, j'essayais d'exécuter cette disposition 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 sousAndroid:text="Yellow"
2) ligne jaune sousAndroid:text="row four"
le triangle avertir dit [I18N] Hardcoded string "Yellow", should use @string resource " et la même chose pour le reste des avertissements. Toute suggestion?

49
user941015

Il est déconseillé de coder en dur des chaînes dans vos fichiers de présentation. Vous devez les ajouter à un fichier de ressources de chaîne, puis les référencer à partir de votre mise en page. 

Cela vous permet de mettre à jour chaque occurrence du mot "jaune" dans toutes les mises en page en même temps en modifiant simplement votre fichier strings.xml. 

Il est également extrêmement utile pour prendre en charge plusieurs langues car un fichier strings.xml distinct peut être utilisé pour chaque langue prise en charge.

exemple: Fichier XML enregistré dans 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 à une vue:

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

De même, les couleurs doivent être stockées dans le fichier colors.xml, puis référencées à l’aide de @ color/nom_couleur.

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

Ce n’est pas une bonne pratique de coder en dur des chaînes dans vos fichiers de présentation/code. Vous devez les ajouter à un fichier de ressources de chaîne, puis 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 cas.
    en même temps en éditant simplement votre fichier strings.xml.
  2. Il est également extrêmement utile pour supporting multiple languages car un strings.xml file séparé peut être utilisé pour chaque langue prise en charge
  3. le point actuel du système @string, veuillez lire la documentation localisation . Il vous permet de localiser facilement le texte dans votre application et de le faire traduire ultérieurement.
  4. Les chaînes peuvent être facilement internationalisées, permettant à votre applicationà support multiple languages with a single application package file.__ (APK).

Avantages

  • Disons que vous avez utilisé la même chaîne à 10 endroits différents dans le code ..__ Et si vous décidiez de la modifier? Au lieu de chercher où tout A été utilisé dans le projet, il suffit de le changer une fois et les modifications sont répercutées partout dans le projet.
  • Les chaînes de caractères n’encombrent pas votre code d’application, elles restent claires et facile à maintenir.
10
Xar E Ahmer

Vous devez les créer sous Strings.xml

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

Vous devez remplacer et référencer comme ceci

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

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

10
Hanson So

Vous pouvez aller en mode Conception et sélectionner "Corriger" au bas de l'avertissement. Ensuite, une fenêtre pop-up apparaîtra (il semble que cela va enregistrer la nouvelle chaîne) et voilà, l'erreur est corrigée.

3
Keith Peñas

Une bonne pratique consiste à écrire du texte dans String.xml.

exemple:

String.xml

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

et disposition intérieure:

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