Sunteți pe pagina 1din 26

Ce este Android?

Android este un software pentru dispozitive mobile, care include un sistem de operare i aplicaii cheie. SDK-ul Android ofer instrumentele i API-urile necesare pentru a ncepe dezvoltarea de aplicatii pe platforma Android folosind limbajulde programare Java.

Arhitectura Android

Aplicatii
Android va fi livrat cu un set de aplicaii de baz, inclusiv un client de e-mail, program de SMS, calendar, hri, browser,agenda de contacte i altele. Toate aplicatiile sunt scrise folosind limbajul de programare Java.

Biblioteci
Android include un set de biblioteci C / C++ utilizate de ctre diferite componente ale sistemului Android. Aceste capaciti sunt aduse dezvoltatorilor prin intermediul Android application framework. Cateva din bibliotecile de baz sunt enumerate mai jos: System C:o implementare derivata din BSD a bibliotecii standard C (libc), speciala pt device-urile Linux Biblioteci media:bazate pe OpenCORE-ul PacketVideo ;acestea suporta redarea si inregistrarea a celor mai populare formate audio si video,precum si imagini,incluzand MPEG4,H.264,MP3,AAC,AMR,JPG,PNG Surface Manager:gestioneaza accesul la display si compune perfect layere grafice 2D si 3D de la diferite aplicatii LibWebCore:un engine modern care da putere atat browserului Andorid cat si continutului web incorporat SGL:engine-ul de grafica 2d biblioteci 3D:implementari bazate pr OpenGL ES 1.0 API;bibliotecile folosesc ori accelerare hardware 3D(unde exista) sau software-ul optimizat 3D de rasterizare SWLite:un engine puternic si simplu de baza de date disponibil pt toate aplicatiile

Android Runtime
Android include un set de biblioteci core care furnizeaza aproape toata functionalitatea bibliotecilor core ala limbajului de programare Java. Fiecare aplicatie Android ruleaza in procesul ei separat cu propria instanta de masina virtuala Dalvik.Dalvik a fost scris pt ca un device sa poata rula mai multe VM eficient.VM Dalvik executa fisiere in formatul .dex care este optimizat pt folosirea eficienta a memoriei.VM este bazat pe registrii si ruleaza clase compilate de un compiler Java care au fost transformate in .dex de catre tool-ul dx.

Vmul Dalovik se bazeaza pe kernel Linux pt functionalitati de baza precum fire de executie si gestionare memoriei mici.

Kernelul Linux
Android se bazeaza pe Linux vs 2.6 pt servicii de sisteme core cum ar fi securitatea,gestionarea memoriei,gestionarea proceselor,retea,drivere.Kernelul este si un strat bstract intre hardware si restul software-ului.

Grafica
Grafica Android este bazata pe o biblioteca speciala 2D si OpenGl ES 1.0 pt grafica performanta 3D.Cele mai comune API grafice se pot gasi in drawable package.APIurile OpenGL sunt disponibile la Khronos OpenGL ES package,plus cateva Android OpenGL utilities. Cand pornim un proiect,este foarte important sa stim care vor fi cerintele grafice.Diverse sarcini grafice sunt cel mai bine realizate cu diverse tehnici.De exemplu,grafica si animatiile pt o aplicatie aproape statica ar trebui implementate diferit de grafica si animatiile pt un joc interactiv 3D. Acum vom discuta cateva optiuni pe care le avem pt a desena in Android si ce sarcini sunt cel mai bine adecvate. Cand desenam grafica 2D,avem 2 optiuni: a)Desenarea animatiilor si a graficii intr-un View object din layout;astfel desenele si animatiile sunt procesate de catre procesul View b)Desenarea graficii direct intr-un Canvas.Astfel,se apeleaza clasa draw() sau una din metodele precum drawPicture().Astfel se controleaza si animatia. Optiunea a) este alegerea cea mai buna atunci cand vrem sa desenam grafica simpla care nu se schimba dinamic sau nu face parte intr-un joc performant.De exemplu,se poate desena in View cand dorim sa afisam o grafica statica sau o animatie predefinita intr-o aplicatie statica. Optiunea b) este mai buna atunci cand aplicatia are nevoie de re-desenare dinamica.Fundamental,orice joc video ar trebui desenat in Canvas-ul sau.Sunt mai multe moduri de realizare: in acelasi fir de executie ca si UI Activity,unde se creaza o componenta View in layout,se apeleaza invalidate() si apoi se proceseaza apelul onDraw().

Sau,intr-un fir de executie separat,unde se gestioneaza SurfaceView si se efectueaza desenul in Canvas cat de repede este capabil firul de executie (nu e nevoie de o cerere invalidate() ).

Grafica simpla in View


Daca vei desena ceva simplu(imagini,forme,culori,animatii predefinite etc) atunci ar trebui sa desenezi cel mai probabil intr-un View sau in continutul unui ImageView in layout.

Desenare in Canvas
Cand scrieti o aplicatie in care vrei sa efectuezi un desen mai special si/sau animatii controlate complexe,ar trebui sa desenezi in Canvas. Acesta este o interfata care va contine toate apelurile de tip draw. Desenul este efectuat pe o baza Bitmap,plasat intr-o fereastra. In cazul in care desenezi prin metoda onDraw(),este nevoie doar sa iti plasezi desenul in Canvas.Poti de asemenea sa obtii un Canvas cu SurfaceHolder.lockCanvas(),cand lucrezi cu un obiect SurfaceView.Ca sa creezi un nou Canvas,trebuie sa definesti Bitmapul pe care desenul va fi realizat.Bitmapul este mereu necesar pt un Canvas.Poti sa setezi un Canvas asa:
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b);

Acum Canvasul tau va desena in Bitmapul definit.Este recomandat sa iti desenezi grafica finala prin Canvasul oferit de View.onDraw() sau SurfaceHolder.lockCanvas(). Clasa Canvas are setul ei de metode grafice pe care le poti utiliza precum drawBitmap(..),drawRect(..),drawText(..)si altele.

Localizare

Android va rula pe multe device-uri in multe regiuni.Pt a ajunge la majoritatea utilizatorilor,aplicatia ta trebuie sa foloseasca text,fisiere audio numere,grafica in moduri apropiate de regiunile unde aceasta va fi folosita. Acest document descrie cele mai bune metode de localizare a aplicatiilor Android. Principiile se aplica fie ca utilizezi Eclipse sau orice alt IDE. Este o practica buna sa folosesti resursele framework Android pt a separa aspectele de localizare ale aplicatiei cat de mult e posibil fata de nucleul Java: Poti sa iti pui continutul interfetei cu utilizatorul al aplicatiei in fisiere resursa dupa cum este descris in acest document Comportamentul interfetei cu utilizatorul este condus de codul Java.De exemplu, daca utlizatorul introduce date ce necesita sa fie formatate sau sortate diferit in functie de locatie,atunci ar trebui sa utilizezi Java pt manipularea programata.

Tutorialul Hello L10N te trece prin pasii pt a crea o simpla aplicatie de localizare care foloseste resurse specifice locatiei in modul in care este descris in acest document

Schimbarea resurselor in Android


Resursele sunt string-uri text,layouts,sunete,grafica si alte date statice de care aplicatia ta Android are nevoie.O aplicatie poate contine seturi multiple de resurse,fiecare customizata pt diferite configuratii ale device-ului.Cand un utilizator ruleaza aplicatia,Android automat selecteaza si incarca resursele care se potrivesc cel mai bine pt device. Cand scrii aplicatia,creezi resurse default si alternative pt a fi utlizate de aplicatia ta.Pt a crea resurse,plasezi fisiere in subdirectoare cu nume special in directorul proiectului res/.

De ce resursele default sunt importante


De fiecare data cand aplicatia ruleaza intr-o locatie nespecificata,Android va rula string-urile default din res/values/strings.xml.Daca acest fisier este absent sau

daca lipseste un string necesar aplicatiei,atunci aceasta nu va rula si va aparea o eroare.Exemplul urmator ilustreaza ce poate sa se intample cand textul default este incomplet. Ex: Un cod de aplicatie Java atribuie doua string-uri,text_a si text_b.Aceasta aplicatie include si un fisier de resurse de localizare(res/values-en/strings.xml) care defineste text_a si text_b in engleza.Aceasta aplicatie include de asemenea si un fisier de resurse default( res/values/strings.xml) care include o definire pt text_a dar nu si pt text_b: Aceasta aplicatie ar putea sa nu compileze fara o problema.Un IDE precum Eclipse nu va evidentia vreo eroare daca o resursa lipseste Cand aplicatia porneste pe un device cu locatia setata pe English,aplicatia ar putea rula fara vreo eroare,pt ca res/values-en/strings.xml contine ambele stringuri necesare. Totusi utilizatorul va primi un mesaj de eroare si un buton de Force Close cand aceasta aplicatia va fi rulata pe un device setat pe o limba alta decat engleza.Aplicatia nu va rula.

Pt a preveni aceasta situatie fii sigur ca un fisier res/values/strings.xml exista si ca defineste fiecare string necesar.Situatia se aplica la toate tipurile de resurse nu doar pt stringuri.

Folosirea resurselor pt localizare


Cum se creezi resurse default
Pune textul default al aplicatiei intr-un fisier cu urmatoarul nume si locatie: res/values/strings.xml String-urile text in res/values/strings.xml ar trebui sa foloseasca limba default, care este limba la care te astepti sa o foloseasca majoritatea utilizatorilor. Set-ul de resurse default trebuie sa includa orice layout default si poate include alt tip de resurse precum animatiile.

res/drawable/ =directorul pt fisierul grafic,icon-ul aplicatiei in


Market

res/layout/ =directorul pt fisierul XML care defineste layout-ul


default

res/anim/
res/xml/

res/raw/
In codul tau,examineaza fiecare referinta catre o resursa Andorid.Fii sigur ca o resursa default este definita pt fiecare.De asemenea fi sigur ca fisierul string default este complet.Un fisier string localized poate sa contina un subset de stringuri,dar fisierul de stringuri default trebuie sa le contina pe toate.

Cum sa creezi resurse alternative


O parte importanta a localizarii unei aplicatii este furnizarea textului in diverse limbi. In unele cazuri vei furniza de asemenea grafici alternative,sunete,layouts si alte resurse specifice locatiei. O aplicatie poate specifica mai multe directoare res/<qualifiers>/.Pt a crea resurse alternative pt o locatie diferita,folosesti un calificativ diferit care specifica o limba sau o combinatie de limba-regiune. Ex: Sa presupunem ca limba default pt aplicatia ta este English.De asemenea presupunem ca vrei sa localizezi tot textul pe French si o mare parte pe Japanese.In acest caz poti sa creezi 3 fisiere alternative strings.xml fiecare stocat intr-un director de resurse specific locatiei: 1) res/values/strings.xml contine textul in English pt toate stringurile folosite de aplicatie,incuzand stringul title 2) res/values-fr/strings.xml contine textul in franceza pt toate stringurile incluzand title 3) res/values-ja/strings.xml contine textul in japoneza exceptand title Daca codul tau Java se refera la R.string.title,uite ce se va intampla la rulare: Daca device-ul e setat pe orice alta limba decat franceza,Andorid va incarca title din fisierul res/values/strings.xml Daca device-ul e setat pe franceza,Android va incarca title din res/valuesfr/strings.xml.

De remarcat faptul ca daca device-ul e setat pe limba japoneza,Android va cauta title in res/values-ja/strings/xml.Dar pt ca nu exista un asemenea string inclus in acel fisier, Android va alege default si va incarca title in engleza de la res/values/strings.xml.

Care resurse prevaleaza?


Daca mai multe fisiere de resurse se potrivesc pe aceeasi configuratie a device-ului, Android ca urma un set de reguli in a decide care fisier sa foloseasca.Printre calificativele care ar putea fi specificate in numele directorului de resurse localizarea aproape ntotdeauna are prioritate. Ex: Sa presupunem ca o aplicatie include un set default de desene si 2 alte seturi de desene,fiecare optimizate pt o configuratie diferita: res/drawable/ =contine desenele default res.drawable-small-land-stylus/ =contine desenele optimizate pt folosirea unui device care asteapta introducerea datelor de la un stylus si are o densitate QVGA scazuta a ecranului in orientare landscape. res/drawable-ja/ =contine desenele optimizate pt folosirea limbii japoneze

Daca aplicatia ruleaza pe un device care are configurata ca limba cea japoneza,Andoid va incarca desenele din res/drawable-ja/ chiar daca device-ul ar astepta folosirea unui stylus Exceptie:Singurele calificative care prevaleaza peste locatie in selectia unui proces ar fi MCC si MNC(codul mobil de tara si codul mobil de retea)

Ex: Sa presupunem ca avem urmatoarea situatie: Codul aplicatiei apeleaza R.string.text_a 2 fisiere de resurse relevante sunt disponibile: res/values-mcc404/strings.xml care include text_a in limba default a aplicatiei,in acest caz engleza. res/values-hi/strings.xml care include text_a in Hindi Aplicatia ruleaza pe un device care are urmatoarea configuratie: Cardul SIM este conectat la un retea mobila in India(MCC404) Limba este Hindi.

Android va incarca text_a din res/values-mcc404/strings.xml in engleza,chiar daca device-ul este setat pe Hindi.Asta din cauza ca,in selctia proceselor de resurse,Android prefera MCC peste limba. Procesul de selectie nu este intotdeauna atat de simplu precum acest exemplu sugereaza.

Referintele la resurse in Java


In codul Java al aplicatiei tale,faci referinta la resurse folosind sintaxa R.resource_type.resource_name sau android.R.resource_type.resource_name

Strategii de localizare Proiecteaza aplicatia ta sa ruleze in orice locatie


Nu poti sa presupui orice despre device-ul de pe care un utilizator va rula aplicatia ta. Device-ul ar putea avea hardware pe care nu l-ai anticipat sau ar putea fi setat pe o locatie pe care tu nu ai planificat-o sau pe care nu o poti testa.Proiecteaza-ti aplicatia astfel incat va functiona normal pe orice device ar rula. Important:Fii sigur ca aplicatia include un set complet de resurse default Fii sigur ca ai inclus folderele res/drawable/ si res/values/ care contin toate imaginile si textul necesar aplicatiei. Daca unei aplicatii ii lipseste chiar si o singura resursa default,nu va rula pe un device setat pe o locatie care nu e acceptata.De exemplu res/values/strings.xml i-ar putea lipsi un string necesar aplicatiei,cand aplicatia va rula intr-o locatie neacceptata va incerca sa incarce res/values/strings.xml si utilizatorul va primi o eroare si un buton de Force Close.Un IDE ca Eclipse nu va evidentia acest tip de eroare si nu vei vedea problema cand vei testa aplicatia pe un device setat pe o locatie acceptata.

Proiecteaza un layout flexibil


Daca vrei sa rearanjezi layout-ul tau astfel incat sa se potriveasca cu o anumita limba(de ex germana are cuvinte lungi) poti sa creezi un layout alternativ (de exemplu

res/layout-de/main.xml).Totusi,acest lucru va face aplicatia ta mai greu de intretinut.E mai bine sa creezi un singur layout mai flexibil. O alta situatie tipica este o limba care necesita ceva diferit in layout.De exemplu ai putea avea un formular de contact,care include 2 campuri de nume cand aplicatia ruleaza in japoneza,dar 3 campuri de nume cand aplicatia ruleaza alte limbi.Vei putea sa rezolvi situatia in 2 moduri: Creeaza un layout cu un camp pe care il poti programa enable/disable in functie de limba,sau Fa layout-ul principal sa includa un alt layout acel camp.Al doilea layout ar putea sa aibe configuratii diferite in functie de diferite limbi.

Fereste-te sa creezi mai multe fisiere de resurse decat ai nevoie


Probabil nu vei avea nevoie sa creezi o alternativa de locatie pt orice resursa in aplicatia ta.De exemplu,layoutul definit in res/layout/main.xml poate rula in orice locatie si in aces caz nu va mai fi nevoie sa creezi mai multe fisiere alternative de layout. De asemenea,nu vei avea nevoie sa creezi text alternativ pt ori string.De exemplu sa presupunem urmatoarele: Limba default a aplicatiei tale este engleza americana.Fiecare string folosit de aplicatie este definit folosind engleza americana in res/values/strings.xml Pt anumite fraza importante vrei sa furnizezi si ortografie engleza britanica Vrei ca aceste string-uri alternative sa fie folosite atunci cand aplicatia ta ruleaza pe un device in Anglia

Pt a face acest lucru poti crea un fisier mic numit res/values-en-rGB/strings.xml care sa includa numai stringurile care sunt diferite atunci cand aplicatia va rula in Anglia.Pt restul stringurilor aplicatia le va folosi pe cele default,definite in res/values/strings/xml.

Foloseste obiectul Android Context pt cautare manuala


Poti sa cauti locatia folosind obiectul Context:
String locale = context.getResources().getConfiguration().locale.getDisplayName();

Testarea aplicatiilor cu locatii


Tine minte ca device-ul testat poate sa fie diferit de device-urile folosite de utilizatori in alte zone geografice.Locatiile disponibile pe device-ul tau pot sa difere de ce disponibile pe alte deviceuri.De asemenea,rezolutia si densitatea ecranului ar putea sa difere,lucru ce poate afecta afisarea string-urilor si a desenelor in UI. Pt a schimba locatia pe device,foloseste Home>Menu>Settings>Locale&text> Select locale.

Testarea pe un emulator
Vezi emulatorul Android

Crearea si folosirea unei locatii speciale


O locatie speciala este o combinatie limba/regiune care nu este suportata de sistemul Android.Poti sa testezi cum o aplicatie ruleaza intr-o locatie speciala,creand o astfel de locatie in emulator.Sunt 2 moduri de realizare: Foloseste aplicatia Custom Locale,care poate fi accesata din tab-ul Aplication Schimba o locatie speciala din adb shell,descris in continuare Cand setezi emulatorul pe o locatie speciala care nu este accesibila sistemului Android,sistemul va fi afisat in lomba default.Totusi aplicatia ta ar trebui sa se localizeze corect.

Schimbare locatiei emulatorului din adb shell


Pt a schimba locatia in emulator folosind adb shell: 1) Alege locatia dorita si determina codurile de limba si regiune,de exemplu fr pt franceza si CA pt Canada

2) Ruleaza emulatorul 3) Din linia de comanda a computerului gazda,ruleaza comanda: adb shell sau daca ai un device atasat,specifica emulatorului adaugand optiunea e adb e shell 4) La promptul adb #,ruleaza comanda: seprop persist.sys.language [language code];setprop persist.sys.country [country code];stop;sleep 5;restart

De exemplu,ca sa testezi in franceza canadiana: setprop persist.sys.language fr;setprop persist.sys.country CA;stop;sleep 5;start Acest lucru va face emulatorul sa se restarteze.Dupa ce ecranul Home reapare, relanseaza aplicatia si aceasta va rula cu noua locatie

Testarea cu resurse default


Uite cum poti sa testezi daca o aplicatie contine toate resursele de stringuri de care are nevoie: 1) Seteaza emulatorul sau device-ul cu o limba care nu poate fi suportata.De exemplu,daca o aplicatie are stringuri in franceza in res/values-fr/ dar nu are stringuri in spaniola res/values-es/;seteaza locatia emulatorului pe spaniola. 2) Ruleaza aplicatia 3) Daca aplicatia are un mesaj de eroare si un buton de Force Close,ar putea sa caute un string care nu este disponibil.Fii sigur ca fisierul tau res/values/strings.xml include o definitie pt fiecare string pe care aplicatia ta il foloseste.

Daca testul este cu succes,repeta pt celelalte tipuri de configuratie.De exemplu, daca o aplicatie are un fisier de layout numit res/layout-land/main.xml dar nu are un fisier numit res/layout-port/main.xml seteaza apoi emulatorul sau device-ul pe orientare tip portret si vezi daca aplicatia va rula.

Publicarea aplicatiilor cu locatie


Market-ul Android este aplicatia principala de distribuire pt sistemele Android. Pt a publica o aplicatie localizata,e nevoie sa semnezi aplicatia,versiunea si sa treci prin ceilalti pasi descisi in tutorial. Daca imparti aplicatia in diferite fisiera .apk,fiecare pt o locatie diferita,urmeaza pasii urmatori: Subscrie fiecare fisier .apk cu acelasi certificat Da fiecarui fisier .apk un nume diferit.Momentan este imposibil sa pui 2 aplicatii in Market care au exact acelasi nume. Inclide si un set complet de resurse default in fiecare fisier .apk

Hello,L10N

In acest tutorial,vom crea o aplicatie Hello,L10N care foloseste frameworkul Android pt a incarca selectiv resurse.Apoi vom localiza aplicatia prin adaugarea resurselor in directorul res/. Acest tutorial foloseste practicile descrise in tutorialul de localizare anterior.

Crearea unei aplicatii fara localizare


Prima versiune a aplicatiei Hello,L10N va folosi numai directoare de resurse default (res/drawable,res/layout si res/values).Aceste resurse nu sunt localizabile-ele sunt desene,layout si string-uri pe care ne asteptam sa le folosim cel mai des.Cand un utilizator ruleaza o aplicatie in locatia default,sau intr-o locatie care nu este suportata de catre aplicatie,aceasta va incarca resurse din directoarele default. Aplicatia consta intr-o interfata simpla care afiseaza 2 obiecte TextView si o imagine Button cu o imagine de fundal a unui steag.La click,butonul afiseaza un obiect AlertDialog care arata text aditional.

Crearea proiectului si a layout-ului


Pt aceasta aplicatie,limba default va fi engleza britanica si locatia default va fi Regatul Unit. 1) Incepe un nou proiect numit HelloL10N.Daca folosesti Eclipse completeaza aceste valori in New Android Project: Numele proiectului: HelloL10N Numele aplicatiei: Hello, L10N Numele pachetului: com.example.hellol10n Create Activity:HelloL10N Min SDK Version:3 Proiectul de baza contine un director res/ cu subdirectoare pt 3 din cele mai comune tipuri de resurse:desene(res/drawable/),layouts(res/layout/) si strings (res/values).Majoritatea lucrului pt localizare ce va fi facut in continuare in acest tutorial va implica adaugarea de subdirectoare la res/.

2) Deschide fisierul res/layout/main.xml si inlocuieste-l cu urmatorul cod:


<?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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/text_a" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:text="@string/text_b" /> <Button android:id="@+id/flag_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </LinearLayout>

LinearLayout-ul are 2 obiecte TextView care vor afisa textul locatiei si un Button ce va afisa imaginea steagului.

Creaza resurse default


1)Creaza stringuri text default.Pt acest lucru,deschide res/values/strings.xml si introduce codul urmator:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Hello, L10N</string> <string name="text_a">Shall I compare thee to a summer"'"s day?</string> <string name="text_b">Thou art more lovely and more temperate.</string> <string name="dialog_title">No Localisation</string> <string name="dialog_text">This dialog box"'"s strings are not localised. For every locale, the text here will come from values/strings.xml.</string> </resources>

Acest cod furnizeaza text in engleza britanica pt orice string folosit.Cand vom localiza aplicatia,vom furniza text alternativ in germana,franceza si japoneza pt unele stringuri. 2)Adauga un desen pt steag in folderul res/drawable ptrin salvarea flag.png ca res/drawable/flag.png.Cand aplicatia nu este localizata,va afisa steagul englez. 3)Deschide Hello10N.java(in directorul src/) si adauga urmatorul cod in metoda onCreate() (dupa setContentView)

// assign flag.png to the button, loading correct flag image for current locale Button b; (b = (Button)findViewById(R.id.flag_button)).setBackgroundDrawable(this.getResou rces().getDrawable(R.drawable.flag)); // build dialog box to display when user clicks the flag AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.dialog_text)

.setCancelable(false) .setTitle(R.string.dialog_title) .setPositiveButton("Done", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }); final AlertDialog alert = builder.create(); // set click listener on the flag to show the dialog box b.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { alert.show(); } });

Sfat:In Eclipse,foloseste CTRL-Shift-O pt a gasi si a adauga pachetele lipse proiectului tau,apoi salveaza fisierul HelloL10N.java Codul introdus face urmatoarele: Atribuie steagul corect butonului.Pana acum,nici o resursa nu este definita in afara de cele default,astfel ca acest cod va atribui continutul res/drawable/flag.png icon-ului pt steag,idiferent de locatie.Odata ce vom adauga noi steaguri pt diferite locatii,codul va atribui uneori diferite alte steaguri. Creaza un obiect AlertDialog si seteaza un senzor de click astfel cand un utilizator apasa butonul,se va afisa AlertDialog.Nu vom localiza textul dialog;AlertDialog va afisa mereu dialog_text care este localizat in res/values/strings.xml. Structura proiectului este acum urmatoarea:

Sfat: Daca vei dori sa rulezi aplicatia pe un device si nu doar pe emulator,deschide AndoridManifest.xml si adauga: android:debuggable=true in interiorul elementului <aplication>.Pt informatii despre setarile device-ului ca sa ruleze aplicatii de pe sistemul tau,vezi capitolul Developing in a Device

Rularea unei aplicatii fara locatie


Salveaza proiectul si ruleaza aplicatia ca sa vezi cum merge.Nu conteaza ce locatie este setata pe emulator sau pe device,aplicatia ruleaza in acelasi mod.Ar trebui sa arate in felul urmator(inainte si dupa alegerea steagului):

Planificarea localizarii
Primul pas in localizarea unei aplicatii este sa planifici cum va interpreta diferite locatii. In aceasta aplicatie,locatia default este Regatul Unit.Vom adauga cateva informatii specifice locatiei pt Germania,Franta,Canada,Japonia si Statele Unite.Tabelul 1 arata planificarea pt cum va arata aplicatia in diferite locatii:

Regi on / Lang uage


Engli sh

United Kingdom

Germany

France

Canada

Japan

United States

Other Location

British English text; British flag(defaul t) -

British English text; Canadian flag

British English text; U.S. flag

British English text; British flag (defau lt) German text forapp_n ame, tex t_aand t ext_b; British flag French text forapp_n ame, tex t_aand t ext_b; British flag

Germ an

German text forapp_n ame, tex t_aand t ext_b; German flag -

Frenc h

French text forapp_ name, t ext_aa nd tex t_b; French flag -

French text forapp_ name, t ext_aan d text_ b; Canadian flag -

Japan ese

Japanes e text fortex t_a an dtext _b; Japanes e flag -

Japanese text fortext_ a and tex t_b; British flag

Other Lang uage

British English text; British flag (defau lt)

Precum in tabelul de sus,planul contine 5 icon-uri de steaguri aditionale fara de cel englez,deja in res/drawable/.De asemenea contine 3 seturi de stringuri text in plus fata de cele din res/values/strings.xml. Tabelul 2 arata unde e nevoie de stringurile si steagurile necesare si specifica care dintre ele vor fi incarcate si in ce locatii. Locale Code Default de-rDE fr-rFR fr-rCA en-rCA ja-rJP en-rUS Language / Country English / United Kingdom German / Germany French / France French / Canada English / Canada Japanese / Japan English / United States Location of strings.xml res/values/ res/values-de/ res/values-fr/ res/values-fr/ (res/values/) res/values-ja/ (res/values/) Location of flag.png res/drawable/ res/drawable-de-rDE/ res/drawable-fr-rFR/ res/drawable-fr-rCA/ res/drawable-en-rCA/ res/drawable-ja-rJP/ res/drawable-en-rUS/

Sfat:Un calificativ de folder nu poate specifica o regiune fara limba.Avand un folder numit res/drawable-rCA/,de exemplu,va impiedica aplicatia de la compilare. In timpul rularii,aplicatia va selecta un set de resurse bazat pe locatia setata pe device-ul utilizatorului.In cazurile in care resursele specifice locatiei nu sunt disponibile, aplicatia le va folosi pe cele default. De exemplu,sa presupunem ca limba unui device este setata pe germana si locatia pe Elvetia.Pt ca aplicatia nu are un director res/drawable-de-rCH/ cu un fisier flag.png,sistemul va folosi default,care este steagul UK localizat in res/drawable/flag.png.Limba folosita va fi germana.Afisarea steagului Germaniei elvetienilor nu este idea,dar pt moment vom lasa acest lucru asa.Sunt diferite moduri in care poti imbunatati comportamentul aplicatiei in caz de doresti: Foloseste un default icon generic.In aceasta aplicatie ar putea sa fie o imagine ce il reprezinta pe Shakespeare.

Creaza un folder res/drawable-de/ care include un icon pe care aplicatia il va folosi de fiecare data cand limba este setata pe germana,dar cand locatia nu este Germania.

Localizarea aplicatiei Localizarea stringurilor


Aplicatia necesita 3 fisiere strings.xml in plus,pt germana,franceza si japoneza.Pt a crea aceste resurse cu Eclipse: 1)Selecteaza File>New>Android XML File si deschide New Android XML File. Poti sa deschizi si prin click-ul pe icon-ul din toolbar:

2)Selecteaza L10N pt campum Project si tasteaza strings.xml in campul File. In lista din stanga selecteaza Language,si click pe sageata din dreapta:

3)Tasteaza de in campul Language si apoi Finish

Un nou fisier, res/values-de/strings.xml apare acum printre fisierele proiectului. 4)Repeta acesti pasi pt codurile de limba fr si ja.Acum proiectul va avea urmatoarele fisiere:
res/values-de/strings.xml res/values-fr/strings.xml res/values-ja/strings.xml

5)Adauga textul de locatie pt aceste noi fisiere.Pt acest lucru,deschide fisierul res/values-<qualifier>/strings.xml si schimba codul dupa cum urmeaza:

File
res/valuesde/strings.x ml

Replace the contents with the following code:


<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Hallo, Lokalisierung</string> <string name="text_a">Soll ich dich einem Sommertag vergleichen,</string> <string name="text_b">Der du viel lieblicher und sanfter bist?</string> </resources>

res/valuesfr/strings.x ml

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Bonjour, Localisation</string> <string name="text_a">Irai-je te comparer au jour d't?</string> <string name="text_b">Tu es plus tendre et bien plus tempr.</string> </resources>

res/valuesja/strings.x ml

<?xml version="1.0" encoding="utf-8"?> <resources> <string name="text_a">< /string> <string name="text_b"></stri ng> </resources>

Localizarea imaginilor
Dupa cum este aratat si in tabelul2,aplicatia are nevoie de inca 6 foldere de desene,fiecare continand un icon flag.png.Adauga icon-urile necesare la proiect: 1)Salveaza un icon pt steagul Germaniei ca res/drawable-de-rDE/flag.png in spatiul de lucru al aplicatiei. De exemplu: deschide imaginea salveaz-o in your-workspace/HelloL10N/res/drawable-de-rDE/

2)Salveaza un icon pt steagul Frantei ca res/drawable-fr-rFR/flag.png 3) Salveaza un icon pt steagul Canadei ca res/drawable-fr-rCA/flag.png 4)Salveaza icon-ul pt steagul Canadei inca o data,de aceasta data in res/drawable-enrCA/flag.png (trebuie sa existe 2 foldere separate,unul pt fiecare limba din Canada reprezentata in aplicatie) 5) Salveaza un icon pt steagul Japoniei ca res/drawable-ja-rJP/flag.png 6) Salveaza un icon pt steagul Statelor Unite ca res/drawable-en-rUS/flag.png Daca folosesti Eclipse,da un refresh proiectului (F5).Noul folder res/drawable<qualifier>/ ar trebui sa apara in fereastra proiectului.

Rularea si testarea aplicatiei cu locatie

Odata ce ai adaugat resursele de stringuri si imagini pt locatii,esti pregatit sa rulezi aplicatia si sa ii testezi corectitudinea.Sa schimbi locatia unui device sau in emulator, foloseste aplicatia Settings(Home > Menu > Settings > Locale&text >Select locale). Depinzand dupa cum un device este configurat,ar putea sa nu ofere locatii alternative in aplicatia Settings,sau ar putea sa ofere doar cateva.Emulatorul,pe de alta parte,va oferi toate locatiile care sunt disponibile sistemului Android. Ca sa setezi emulatorul pe o locatie care nu este disponibila,foloseste aplicatia Custom Locale,care este in tab-ul Aplicatii:

Ca sa schimbi noua locatie,tine apasat numele unei locatii:

Pt o lista a locatiilor disponibile pe diferite versiuni de Android,vezi documentatia platformei,listate in Downloadable SDK Conponents in tabul SDK. Ruleaza aplicatia pt fiecare locatie cunoscuta,plus o locatie necunoscuta. Urmeaza unele rezultate pe care poti sa le obtii:\ Locale: German/Germany:

French/Canada:

German/Elvetia(numai limba este suportata de aplicatia HelloL10N)

Japanese:

Romansh/Switzerland (locatie speciala rm_CH,nu este cunoscuta de aplicatia HelloL10N,asa ca se vor folosi resursele default):