poniedziałek, 10 lutego 2014

Zasoby tekstowe – wykorzystanie pliku strings.xml


Kod źródłowy do tej lekcji znajduje się tutaj. Rozpakuj go i zaimportuj. W katalogu z kodem źródłowym znajdą się podkatalogi oznaczone numerami. Są to po prostu kolejne wersje kodu, tworzonego w ramach przykładów. Możesz analizować kolejne kroki tworzenia aplikacji, lub od razu zabrać się za kod z katalogu o najwyższym numerku.

Wyobraźmy sobie taką sytuację. Wyklejam formularz taki jak np. ten na dole. Podobnych ekranów w aplikacji jest np. 30. W każdym pojawiają się przyciski „Zatwierdź” i „Anuluj”. W niektórych pojawia się też fraza „Imię:”, „Nazwisko” etc.



Teraz musimy zrobić niemieckojęzyczną wersję programu, albo choćby zmienić wszystkie nazwy na pisane małą literą....

Dopuki teksty te określam „na sztywno” w pliku layoutu, tak jak to widać poniżej (linie 15,25,34), doputy będę musiał przy każdej tego typu zmianie modyfikować plik layoutu każdej aktywności której zmiana ma dotyczyć.


  Lepszym rozwiązaniem będzie odnalezienie pliku strings.xml znajdującego się w katalogu values będącego podkatalogiem katalogu res i skorzystanie z możliwości jakie daje.


Kiedy go wyedytujemy, powinniśmy zobaczyć taką zawartość:


Dodajmy tam kilka elementów. Od teraz teksty które pojawiają się nam na formularzu będą definiowane tutaj. Do każdej frazy przypisana jest nazwa np. do frazy „Imię:” przypisana jest nazwa „name”:


  Teraz w elemencie „android:text” zamiast pisać na sztywno tekst który ma się pojawić, piszę odwołanie po nazwie do wpisów w pliku strings.xml (linie 15,25,34):



Możemy takie wskaźniki zrobić we wszystkich plikach layoutów. Dzięki takiemu zabiegowi, zmiana tekstu na wszystkich guzikach służących do zatwierdzania formularza, czy nawet dorobienie alternatywnej wersji językowej aplikacji wymagać będzie zmian w jednym tylko miejscu i bez wielokrotnej zmiany tego samego tekstu w różnych plikach layoutów.

6 komentarzy:

  1. "Doputy" następny błąd, podejrzewam, że to mógł być żart, ale nie jestem pewien czy autor świadomie go zastosował.

    OdpowiedzUsuń
    Odpowiedzi
    1. Oj nie chodziło się na polski. Takie słowo istnieje i zostało dobrze tu zastosowane.

      Usuń
  2. pytanko: jak wyciągnąć i wrzucić do zmiennej tekst z strings.xml ?
    gdy robię coś takiego:
    String tmp = new String; tmp = R.string.nazwaZxml + " " + count; //count zmienna int
    to do stringu wrzuca mi tylko id (int), jak wyciągnąć tego stringa?

    OdpowiedzUsuń
    Odpowiedzi
    1. Ten komentarz został usunięty przez autora.

      Usuń
    2. tmp = getString(R.string.nazwaZXml) + " " + count;

      Usuń