Sunteți pe pagina 1din 9

Laboratorul 1: Hello World

0. Înainte de toate, să pornim un emulator


Porniți Eclipse. Mergeți la Window -> Android SDK and AVD Manager. Aici, la Virtual Devices, creați
unul nou (New).

AVD = Android Virtual Device

Dați un nume AVD-ului


vostru, selectați un target
și puteți crea AVD-ul.

Ce sunt target-urile?

Target-urile indică ce clasa


de device-uri pretinde
AVD-ul vostru ca este.
Practic, target-ul este
platforma care vreți să
ruleze pe emulator.

După ce ați creat AVD-ul, îl puteți selecta și porni. Apăsați Start. Observați în fereastra de Launch
Options un checkbox: Scale display to real size. Înainte să testați un proiect pe un telefon real cu
Android, testați-l măcar o dată în emulatorul scalat la dimensiunea reală. De multe ori se întâmplă ca
butoanele sau textul să fie prea mici ca
să se vadă bine în realitate.

Emulatorul de Android este un emulator


real. Asta înseamnă că rulează un sistem
Android, până la nivelul kernelului. (de-
asta durează atât să se încarce)
1. Cum creăm un proiect pentru Android?

În Eclipse, mergeți la File -> New -> Project, iar de


acolo selectați Android Project

În wizard-ul de New Android Project,


completați câmpurile necesare. Dați un
nume proiectului, alegeți target-ul pentru
care faceți aplicația, dați un nume
aplicației, apoi pachetului și creați o
activitate.

ATENȚIE: Numele pachetului trebuie să


conțină cel puțin doi identificatori, de
forma identificator1.identificator2

După ce apăsați Finish, o să vedeți un


proiect nou. Sursele se află în src, în
package-ul cu numele dat de voi. În gen
găsiți fișierul R.java, care este generat
automat, și cu care nu e bine să vă jucați.
În res găsiți resursele, icon-urile si alte
fisiere pentru layout. În res/layout găsiți
main.xml. (Țineți-l minte, o să vă jucați
ceva cu el)
Deschideți sursa voastră (din src). Pentru a exemplifica, vom folosi notațiile din imagine. Momentan,
Test.java arată așa:

package primul.meu.proiect;

import android.app.Activity;
import android.os.Bundle;

public class Test extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

Dacă rulați acum proiectul (Run As -> Android Application), o să vă apară pe ecranul AVD-ului textul
“Hello World, Test”. Test va fi înlocuit cu numele activității create de voi.

Acum, hai să modificăm puțin sursa. Am adăugat liniile scrise cu bold.

package primul.meu.proiect;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Test extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
TextView tv = new TextView(this);
tv.setText("Bazinga!");
setContentView(tv);
}
}

Rulați din nou. Title Bar. Conține numele aplicației. Poate


fi modificat din res/values/strings.xml

Oricum, acest mod de interfață nu îl vom folosi prea des (de fapt,
deloc :p ). Vom folosi XML – Based Layouts.
2. Layouturi XML

Text View
Ce am făcut până acum reprezintă, practic, scrierea din cod a unei interfețe. Nu e prea plăcut.
Android ofera o alternativă pentru asta: layouturi bazate pe fișiere XML.

Varianta cu XML pentru aplicația de mai sus (prima, cea fără Bazinga) este

<?xml version="1.0" encoding="utf-8"?>


<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"/>

Structura generală a unui XML Android este simplă: un arbore de elemente XML, in care fiecare nod
reprezintă numele unui View Class.

În exemplul de mai sus:


android:id – da un identificator unic elementului TextView. ID-ul poate fi folosit pentru a face
referire View din codul sursă sau din alte XML-uri
android:layout_width – defineste cat din ecran consumă view-ul
android:layout_height – la fel ca android:layout_width, dar pentru înălțimea ecranului
android:text – setează textul pe care îl afișează TextView-ul

Alte posibile proprietăți ale unui TextView:


android:typeface – setează typeface-ul pentru un label, de ex. Monospace
android:textStyle – bold, italic, sau bold_italic
android:textColor – setează culoarea textului, în RGB (#906090 pt. mov)

Butoane
Button este o subclasă a clasei TextView, deci tot ce era valabil pentru TextView-uri este valabil și
pentru butoane. Pentru a lega o acțiune de un buton, e suficient să avem o metodă în activitate de
genul

public void someMethod(View Butonul)


{
//fă ceva
}

Atunci, codul din XML este

<Button

android:onClick=”someMethod”
...
/>
Imagini

Pentru a adăuga imagini, avem două variante: ImageView și ImageButton. Acestea sunt analoage lui
TextView și Button.

E nevoie doar de un atribut android:src în XML, pentru a specifica ce


imagine se va folosi.

De exemplu, XML-ul următor are ca rezultat afișarea unei imagini:

<?xml version="1.0" encoding="utf-8"?>


<ImageView
xmlns:android="http://schemas.android.com/apk/res/a
ndroid"
android:id="@+id/icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/logo1w"
/>

Imaginea se va numi “logo1w.png” si este în res/drawable. Rezultatul este


în imaginea de lângă.

Câmpuri

Câmpurile sunt implementate cu EditText, care e o subclasă a TextView. Pe lângă toate proprietățile
standard ale TextView, EditText mai are și alte proprietăți, cum ar fi android:autoText,
android:capitalize, android:digits sau android:singleLine.

<?xml version="1.0" encoding="utf-8"?>


<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/field"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:singleLine="false"
/>

Modificând puțin codul din proiect

package textg.xml;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
public class hello_cu_xml extends Activity {
/** Called when the activity is first
created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
EditText fld = (EditText)
findViewById(R.id.field);
fld.setText("Our whole universe was in a
hot dense state," +
"Then nearly fourteen billion
years ago expansion started, wait..." +
"The Earth began to cool," +
"The autotrophs began to
drool," +
"Neanderthals developed
tools," +
"We built a wall (we built the
pyramids)," +
"Math, science, history,
unravelling the mysteries," +
"That all started with the big bang!");
}

Observăm că am obținut un EditText, daca dăm click pe ecran,


apare tastatura și putem să adăugăm, să ștergem sau să edităm
textul deja scris.

Layout

Avem mai multe tipuri de layout-uri posibile: linear layout, relative layout, table layout, grid view,
tab layout, list view..

Linear Layout

Linear Layout este un mod de vizualizare (view) care afișează elementele sale într-o direcție, liniar,
fie orinzontal, fie vertical.

Pentru a vedea cum se creează un Linear Layout, vom folosi următorul exemplu:

Faceți copy-paste în fișierul res/layout/main.xmlcu următorul 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">

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

În fișierul .java, încărcați XML-ul:

public void onCreate(Bundle savedInstanceState)


{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}

Rulați aplicația. Rezultatul se observă în figura din dreapta.

Acum hai să și înțelegem ce am făcut. Urmăriți codul XML.

XML-ul conține un Linear Layout “rădăcină”, cu orientarea verticală. Adică toți “copiii” lui vor fi
afișați pe verticală, în jos. Primul fiu este un nou Linear Layout cu orientare orizontală, care conține
patru TextView-uri, cu culori diferite. Al doilea fiu este un Linear Layout cu orientare verticală, ce
conține 4 TextView-uri, unul sub altul.

Ce reprezintă weight?

Se poate întâmpla ca două widget-uri să împartă spațiul liber disponibil. Proprietatea weight indică
proporția de spațiu liber care va fi alocată unui widget. Daca setam android:layout_weight
la aceeași valoare nenulă pentru două widgeturi (de ex. 1), spațiul liber va fi împărțit în mod egaș
între ele. Dacă un widget va avea weight 1, iar celălalt 2, al doilea va avea de două ori mai mult
spațiu decât primul widget. Valoarea default pentru weight este 0.

Ce reprezinta gravity?

Gravity este, practic, alinierea.

android:gravity=”...”

unde ... poate fi left, center_horizontal sau right

br
br

br

br
Aplicație:
Obțineți din cod XML, fără imagini, următorul layout:

S-ar putea să vă placă și