2012-01-05 8 views
42

Jestem początkujący android developer, starałem się uruchomić ten układ liniowy w Eclipse:ustalony ciąg "rząd trzy", należy użyć zasobu @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> 

I zauważyłem:
1) żółty linii pod android:text="Yellow"
2) żółte rzutu pod android:text="row four"
Trójkąt ostrzec mówi [I18N] Hardcoded string "Yellow", should use @string resource " i tak samo w przypadku pozostałych ostrzeżeń. Sugestia?

Odpowiedz

96

Nie jest dobrą praktyką stosowanie ciągów kodu w plikach układu. Powinieneś dodać je do pliku zasobów ciągów, a następnie odnieść je do swojego układu.

Umożliwia to aktualizowanie każdego wystąpienia słowa "żółty" we wszystkich układach w tym samym czasie poprzez samą edycję pliku strings.xml.

Jest również bardzo przydatny do obsługi wielu języków, jako oddzielny plik strings.xml może być używany dla każdego obsługiwanego języka.

przykład: plik XML zapisany w RES/wartości/strings.xml:

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

Ten układ ma zastosowanie XML ciąg do widoku:

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

Podobnie kolory powinny być przechowywane w kolorach .xml, a następnie odniesienie za pomocą @ color/color_name

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

(poza zakresem) również wygląda jak stół. może być tablelayout byłoby bardziej odpowiednie. co więcej, teksty w pismach zniechęcają. sp są bardziej elastyczne. – njzk2

+0

@kiffs: dziękuję, to było pomocne –

+0

Dlaczego to jest @string/... a nie @strings/...? –

10

Musisz tworzyć je pod strings.xml

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

należy wymienić i odniesienie się ten

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

Nie używaj @strings mimo że plik XML mówi strings.xml albo nie będzie działać.

+2

świetnie wyjaśnione – CroiOS

+4

@CroiOS Great English –

8

Nie jest dobrą praktyką stosowanie ciągów kodu w plikach/kodzie układu. Powinieneś dodać je do pliku zasobów ciągów, a następnie odnieść je do swojego układu.

  1. To pozwala aktualizować wszystkie wystąpienia tego samego słowa w każdym
    układów w tym samym czasie po prostu edytując plik strings.xml.
  2. Jest również niezwykle przydatne dla supporting multiple languages jako oddzielnym strings.xml file może być stosowany do każdego obsługiwanego języka
  3. rzeczywistego punktu mając System @string prosimy o zapoznanie się z dokumentacją localization. Pozwala to łatwo zlokalizować tekst w aplikacji, a później go przetłumaczyć.
  4. Struny można łatwo umiędzynarodowić, umożliwiając aplikację do support multiple languages with a single application package file (APK).

Korzyści

  • Powiedzmy, że stosowany sam ciąg w 10 różnych miejscach w kodzie. Co, jeśli zdecydujesz się to zmienić? Zamiast szukać miejsca, w którym został on użyty w projekcie, wystarczy go raz zmienić, a zmiany zostaną odzwierciedlone wszędzie w projekcie.
  • Struny nie zagracają kodu aplikacji, pozostawiając wyraźne i łatwe w obsłudze .
+3

Najlepsza odpowiedź jest na dole .... – Blubber

0

Możesz przejść do trybu projektowania i wybrać "Napraw" na dole ostrzeżenia. Pojawi się wyskakujące okno (wydaje się, że zamierza zarejestrować nowy ciąg) i voila, błąd jest naprawiony.

Powiązane problemy