2012-01-05 19 views
42

Soy un desarrollador de Android principiante, yo estaba tratando de ejecutar este diseño lineal en Eclipse:cadena codificada "fila de tres", debe utilizar los recursos @string

<?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> 

Y, me di cuenta:
1) la línea de amarillo bajo android:text="Yellow"
2) línea amarilla bajo android:text="row four"
el Triángulo advertir dice [I18N] Hardcoded string "Yellow", should use @string resource " y lo mismo para el resto de las advertencias. ¿Alguna sugerencia?

Respuesta

96

No es una buena práctica codificar cadenas de caracteres en sus archivos de diseño. Debe agregarlos a un archivo de recursos de cadena y luego hacer referencia a ellos desde su diseño.

Esto le permite actualizar cada aparición de la palabra "Amarillo" en todos los diseños al mismo tiempo simplemente editando su archivo strings.xml.

También es extremadamente útil para admitir múltiples idiomas, ya que se puede utilizar un archivo strings.xml para cada idioma admitido.

ejemplo: archivo XML guardado en res/valores/strings.xml:

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

Este XML disposición se aplica una cadena a una vista:

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

Del mismo modo colores deben ser almacenados en colores .xml y luego se hace referencia mediante @ color/color_name

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

(fuera de alcance) también, parece una tabla de alguna manera. puede ser una mesa de juego sería más apropiado. además, se desaconseja textize en pt in. sp son más flexibles. – njzk2

+0

@kuffs: gracias, eso fue útil –

+0

¿Por qué es @string/... y no @strings/...? –

10

Debe crearlas bajo strings.xml

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

Debe reemplazar y referencia como esto

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

No utilice @strings aunque el archivo XML dice strings.xml o de lo contrario no funcionará.

+2

gran explicación – CroiOS

+4

@CroiOS Great English –

8

No es una buena práctica codificar cadenas en sus archivos de diseño o código. Debe agregarlos a un archivo de recursos de cadena y luego hacer referencia a ellos desde su diseño.

  1. Esto le permite actualizar todas las apariciones de la misma palabra en todos los
    diseños al mismo tiempo con sólo editar su archivo strings.xml.
  2. También es muy útil para supporting multiple languages como separada strings.xml file se puede utilizar para cada lenguaje soportado
  3. el punto real de tener el sistema @string lea la documentación sobre localization. Le permite localizar fácilmente texto en su aplicación y luego hacerla traducir.
  4. Las cadenas se pueden internacionalizar fácilmente, permitiendo su aplicación a support multiple languages with a single application package file (APK).

Beneficios

  • Digamos que usted utilizó misma cadena en 10 lugares diferentes en el código. ¿Qué sucede si decides modificarlo? En lugar de buscar dónde se ha usado todo en el proyecto, solo lo cambia una vez y los cambios son reflejados en todas partes del proyecto.
  • Las cadenas no saturan el código de su aplicación, dejándolo claro y fáciles de mantener.
+3

La mejor respuesta está en la parte inferior .... – Blubber

0

Puede ir al modo Diseño y seleccionar "Arreglar" en la parte inferior de la advertencia. Luego aparecerá una ventana emergente (parece que va a registrar la nueva cadena) y listo, el error es fijo.

Cuestiones relacionadas