Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
colocvii:colocviu01 [2015/03/28 18:46] Andrei Roșu-Cojocaru |
colocvii:colocviu01 [2015/03/29 12:47] (current) Andrei Roșu-Cojocaru |
||
|---|---|---|---|
| Line 13: | Line 13: | ||
| </HTML> | </HTML> | ||
| - | {{ :pdsd:colocvii:colocviu01:pdsd2015-tp01-varsim.pdf }} | + | {{ colocvii:colocviu01:pdsd2015-tp01-varsim.pdf }} |
| ===== Observații Generale ===== | ===== Observații Generale ===== | ||
| Line 31: | Line 31: | ||
| ===== Rezolvări ===== | ===== Rezolvări ===== | ||
| + | |||
| + | Proiectul Eclipse corespunzător aplicației Android ce conține rezolvările complete ale cerințelor colocviului este disponibil pe [[https://github.com/pdsd2015/PracticalTest01|contul de Github al disciplinei]]. | ||
| **A.1.** Se accesează [[https://www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. | **A.1.** Se accesează [[https://www.github.com|Github]] și se realizează autentificarea în contul personal, prin intermediul butonului //Sign in//. | ||
| - | {{ :pdsd:colocvii:colocviu01:github_authentication.png?nolink&700 }} | + | {{ :colocvii:colocviu01:github_authentication.png?nolink&700 }} |
| Se creează o zonă de lucru corespunzătoare unui proiect prin intermediului butonului //New Repository//. | Se creează o zonă de lucru corespunzătoare unui proiect prin intermediului butonului //New Repository//. | ||
| - | {{ :pdsd:colocvii:colocviu01:github_new_repository.png?nolink }} | + | {{ :colocvii:colocviu01:github_new_repository.png?nolink }} |
| Configurarea depozitului la distanță presupune specificarea: | Configurarea depozitului la distanță presupune specificarea: | ||
| Line 51: | Line 53: | ||
| * tipului de licență sub care este publicat codul sursă. | * tipului de licență sub care este publicat codul sursă. | ||
| - | {{ :pdsd:colocvii:colocviu01:github_repository_configuration.png?nolink }} | + | {{ :colocvii:colocviu01:github_repository_configuration.png?nolink }} |
| **A.2.** Prin intermediul comenzii ''git clone'' se poate descărca întregul conținut în directorul curent (de pe discul local), inclusiv istoricul complet al versiunilor anterioare (care poate fi ulterior reconstituit după această copie, în cazul coruperii informațiilor stocate pe serverul la distanță). | **A.2.** Prin intermediul comenzii ''git clone'' se poate descărca întregul conținut în directorul curent (de pe discul local), inclusiv istoricul complet al versiunilor anterioare (care poate fi ulterior reconstituit după această copie, în cazul coruperii informațiilor stocate pe serverul la distanță). | ||
| Line 61: | Line 63: | ||
| </code> | </code> | ||
| - | **A.3.** Se urmăresc indicațiile disponibile în secțiunea [[:pdsd:laboratoare:laborator01#crearea_unei_aplicatii_android_in_eclipse_luna_sr1a_441_-_obligatoriu|Crearea unei aplicații Android în Eclipse Luna SR1a (4.4.1)]]. | + | **A.3.** Se urmăresc indicațiile disponibile în secțiunea [[:laboratoare:laborator01#crearea_unei_aplicatii_android_in_eclipse_luna_sr1a_441_-_obligatoriu|Crearea unei aplicații Android în Eclipse Luna SR1a (4.4.1)]]. |
| **A.4.** Implementarea interfeței grafice va fi realizată prin intermediul unui fișier ''.xml'' care va fi plasat în directorul ''/res/layout'' al proiectului. | **A.4.** Implementarea interfeței grafice va fi realizată prin intermediul unui fișier ''.xml'' care va fi plasat în directorul ''/res/layout'' al proiectului. | ||
| Line 68: | Line 70: | ||
| * prin folosirea unui singur container de tip ''RelativeLayout'' în care vor fi plasate toate controalele, având poziția definită relativ unele la celelalte sau la marginile părintelui în care sunt incluse; | * prin folosirea unui singur container de tip ''RelativeLayout'' în care vor fi plasate toate controalele, având poziția definită relativ unele la celelalte sau la marginile părintelui în care sunt incluse; | ||
| * prin folosirea mai multor containere de tip ''LinearLayout'', imbricate, având orientări diferite (orizontal - implicit, sau vertical). | * prin folosirea mai multor containere de tip ''LinearLayout'', imbricate, având orientări diferite (orizontal - implicit, sau vertical). | ||
| + | |||
| + | * Varianta 1 - un singur container de tip ''RelativeLayout'' | ||
| + | <note tip>Dacă se dorește ca un anumit control să fie aliniat cu un control care se găsește deasupra sa (aliniere pe orizontală), acesta va fi indicat ca valoare pentru proprietățile ''android:layout_alignLeft'' și ''android:layout_alignRight'' (proprietatea ''android:layout_width'' fiind ignorată în acest caz). În mod similar, dacă se dorește alinierea cu un control aflat la stânga (aliniere pe verticală), acesta va fi precizat ca valoare pentru proprietățile ''android:layout_alignTop'' și ''android:layout_alignBottom'' (proprietatea ''android:layout_height'' fiind ignorată în acest caz). </note> <file xml activity_practical_test01_main.xml> | ||
| + | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||
| + | xmlns:tools="http://schemas.android.com/tools" | ||
| + | android:layout_width="match_parent" | ||
| + | android:layout_height="wrap_content" | ||
| + | tools:context="ro.pub.cs.systems.pdsd.practicaltest01.PracticalTest01MainActivity" > | ||
| + | |||
| + | <Button | ||
| + | android:id="@+id/navigate_to_secondary_activity_button" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="wrap_content" | ||
| + | android:layout_alignParentTop="true" | ||
| + | android:layout_alignParentRight="true" | ||
| + | android:text="@string/navigate_to_secondary_activity" /> | ||
| + | | ||
| + | <EditText | ||
| + | android:id="@+id/left_edit_text" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="wrap_content" | ||
| + | android:saveEnabled="false" | ||
| + | android:enabled="false" | ||
| + | android:inputType="number" | ||
| + | android:ems="7" | ||
| + | android:layout_alignParentLeft="true" | ||
| + | android:layout_below="@id/navigate_to_secondary_activity_button" | ||
| + | android:gravity="center" /> | ||
| + | | ||
| + | <EditText | ||
| + | android:id="@+id/right_edit_text" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="wrap_content" | ||
| + | android:saveEnabled="false" | ||
| + | android:enabled="false" | ||
| + | android:inputType="number" | ||
| + | android:ems="7" | ||
| + | android:layout_alignParentRight="true" | ||
| + | android:layout_below="@id/navigate_to_secondary_activity_button" | ||
| + | android:gravity="center" /> | ||
| + | | ||
| + | <Button | ||
| + | android:id="@+id/left_button" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="wrap_content" | ||
| + | android:layout_alignLeft="@id/left_edit_text" | ||
| + | android:layout_below="@id/left_edit_text" | ||
| + | android:layout_alignRight="@id/left_edit_text" | ||
| + | android:text="@string/press_me" /> | ||
| + | | ||
| + | <Button | ||
| + | android:id="@+id/right_button" | ||
| + | android:layout_width="wrap_content" | ||
| + | android:layout_height="wrap_content" | ||
| + | android:layout_alignLeft="@id/right_edit_text" | ||
| + | android:layout_alignRight="@id/right_edit_text" | ||
| + | android:layout_below="@id/right_edit_text" | ||
| + | android:text="@string/press_me_too" /> | ||
| + | |||
| + | </RelativeLayout> | ||
| + | </file> | ||
| + | |||
| + | * Varianta 2 - mai multe containere de tip ''LinearLayout'' imbricate | ||
| <note tip>Dacă se dorește ca un anumit control să ocupe o anumită proporție în cadrul continerului, se va utiliza proprietatea ''android:layout_weight'', însă pentru a fi luată în considerare, atributul ''android:layout_width'', respectiv ''android:layout_height'' (în funcție de coordonata pe care se dorește obținerea unei astfel de funcționalități) trebuie să aibă valoarea ''0dp''.</note> | <note tip>Dacă se dorește ca un anumit control să ocupe o anumită proporție în cadrul continerului, se va utiliza proprietatea ''android:layout_weight'', însă pentru a fi luată în considerare, atributul ''android:layout_width'', respectiv ''android:layout_height'' (în funcție de coordonata pe care se dorește obținerea unei astfel de funcționalități) trebuie să aibă valoarea ''0dp''.</note> | ||
| Line 317: | Line 382: | ||
| **c)** Pentru a simula faptul că sistemul de operare Android distruge activitatea pentru asigurarea necesarului de resurse, se poate proceda astfel: | **c)** Pentru a simula faptul că sistemul de operare Android distruge activitatea pentru asigurarea necesarului de resurse, se poate proceda astfel: | ||
| - se oprește activitatea prin accesarea butonului //Menu//, astfel încât activitatea să rămână în memorie, fără a fi însă vizibilă, asigurându-se totodată apelarea metodelor ''onPause()'' și ''onStop()'' și implicit a metodei ''onSaveInstanceState()''; | - se oprește activitatea prin accesarea butonului //Menu//, astfel încât activitatea să rămână în memorie, fără a fi însă vizibilă, asigurându-se totodată apelarea metodelor ''onPause()'' și ''onStop()'' și implicit a metodei ''onSaveInstanceState()''; | ||
| - | - în DDMS (//Window// → //Open Perspective// → //Other// → //DDMS//) se identifică procesul corespunzător activății respective și se oprește forțat (prin intermediul butonului //Stop//);\\ {{ :pdsd:colocvii:colocviu01:ddms.png?nolink&400 }} | + | - în DDMS (//Window// → //Open Perspective// → //Other// → //DDMS//) se identifică procesul corespunzător activății respective și se oprește forțat (prin intermediul butonului //Stop//);\\ {{ :colocvii:colocviu01:ddms.png?nolink&400 }} |
| - se (re)pornește activitatea din meniul dispozitivului mobil, astfel încât să se apeleze metodele ''onCreate()'', respectiv ''onStart()'' și ''onResume()'' (și, implicit, ''onRestoreInstanceState()''). | - se (re)pornește activitatea din meniul dispozitivului mobil, astfel încât să se apeleze metodele ''onCreate()'', respectiv ''onStart()'' și ''onResume()'' (și, implicit, ''onRestoreInstanceState()''). | ||
| Line 331: | Line 396: | ||
| Crearea acestor resurse este realizată în mod automat în mediul integrat de dezvoltare Eclipse în momentul în care se solicită definirea unei resurse de tip //Android Activity// (//File// → //New// → //Other// → //Android// → //Android Activity//). | Crearea acestor resurse este realizată în mod automat în mediul integrat de dezvoltare Eclipse în momentul în care se solicită definirea unei resurse de tip //Android Activity// (//File// → //New// → //Other// → //Android// → //Android Activity//). | ||
| - | {{ :pdsd:colocvii:colocviu01:eclipse_activity01.png?nolink&500 }} | + | {{ :colocvii:colocviu01:eclipse_activity01.png?nolink&500 }} |
| - | {{ :pdsd:colocvii:colocviu01:eclipse_activity02.png?nolink&500 }} | + | {{ :colocvii:colocviu01:eclipse_activity02.png?nolink&500 }} |
| - | {{ :pdsd:colocvii:colocviu01:eclipse_activity03.png?nolink&500 }} | + | {{ :colocvii:colocviu01:eclipse_activity03.png?nolink&500 }} |
| - | {{ :pdsd:colocvii:colocviu01:eclipse_activity04.png?nolink&500 }} | + | {{ :colocvii:colocviu01:eclipse_activity04.png?nolink&500 }} |
| **a)** În fișierul ''AndroidManifest.xml'' se specifică activitatea printr-o element de tip ''<activity>'' în cadrul etichetei ''<application>'' pentru care se definesc: | **a)** În fișierul ''AndroidManifest.xml'' se specifică activitatea printr-o element de tip ''<activity>'' în cadrul etichetei ''<application>'' pentru care se definesc: | ||
