Vous êtes sur la page 1sur 5

Enseignant B.

Zaki

Note de cours Android


Les composants dune application Andoid :
En gnral une application Android est compose des lments suivants: - des activits (android.app.Activity): il s'agit d'une partie de l'application prsentant une vue l'utilisateur - des services (android.app.Service): il s'agit d'une activit permettant de faire des traitements de fond sans vue associe - des fournisseurs de contenus (android.content.ContentProvider): permet le partage d'informations au sein ou entre applications - des widgets (android.appwidget.*): une vue accroche au Bureau d'Android - des Intents (android.content.Intent): permet d'envoyer un message pour un composant externe sans le nommer explicitement - des rcepteurs d'Intents (android.content.Broadcast eceiver): permet de dclarer tre capa!le de rpondre des Intents. "es #ntents permettent de grer l'envoi et la rception de messages afin de faire cooprer les applications$ - des notifications (android.app.Noti!ications): permet de notifier l'utilisateur de la survenue d'vnements

La structure dun pro"et Andoid sous eclipse :


%ous eclipse& un pro'et !as sur le plugin ADT est dcompos de la mani(re suivante: src#: les sources )ava du pro'et li$s#: !i!lioth(*ues tierces res#: les sources de l+application res#drawa$le: ressources images res/layout: description des IHMs en XML // cest le package de base res#values: chaines de caract(res et dimensions gen#: les ressources auto gnres par A,assets#: ressources !rutes (raw bytes) "es ressources de l+application sont utilises dans le code en utilisant la classe stati*ue $ A ch*ue fois *ue vous chang le pro'et (a'outer sources& supprimer& etc$)& A,- re.gn(re automati*uement la classe stati*ue $ "es ressources sont utilises de la mani(re suivante: android.R.type_ressource.nom_ressource /eci reprsente l'identifiant de la ressource$ 0n peut& donc& utiliser cet identifiant ou rcuprer l'instance de la ressource en utilisant la classe esources: Resources res = getResources(); String hw = res.getString(R.string.hello); XXX o = res.getXXX(id); 1our les o!'ets graphi*ues& on rcup(re une ressource partir de son id en utiliant la mthode find iew!yId& ce *ui permet d'agir sur ces instances m me si elles ont t cres via leur dfinition 23": Ressource r = (Ressource)findViewById(R.id.ressource); %&emple : on rcup(re une ressource (la!el) de type Te"t iew *ui a comme #, le#te"te$ En suite& nous changer son contenu$

TextView texte = (TextView)findViewById(R.id.le_texte); texte.setText("Bien");

Structure dun programme Andoid


4ne application Android (ensem!le d+activit) tant h!erge sur un syst(me em!ar*u& son cycle de vie d'une application ressem!le celle d'une application )ava 3E $ Ainsi& une activit peut passer par les tats suivants : d$%arrage .5 actif: dtient le focus et est dmarr (onStart invo*u) actif .5 suspendue: ne dtient plus le focus (onPause invo*u) s&spend&e .5 actif: on esume invo*u - s&spend&e .5 dtruit: on'estroy invo*u pu!lic class Acti'ity#(rincipal extends Activity 6 pu$lic void on/reate(Bundle saved#nstance%tate) 6 super$on/reate(saved#nstance%tate)7

Enseignant B. Zaki 88 associer la premire vue graphique l'activit principale de l'application : acceuil set)ontent iew*+.layo&t.acce&il,9 protected void on,estroy() 6 9 protected void on1ause() 69 protected void on:esume() 6 9 protected void on%tart() 6 9 protected void on%top() 6 9 9

Interfaces graphiques :
"es lments graphi*ues hritent de la classe (iew$ 0n peut regrouper des lments graphi*ues dans une (iew)roup$ ,es (iew)roup particuliers sont prdfinis: ce sont des ga!arits (layo&t)$ 4n ga!arit peut contenir des lments graphi*ues& ou d'autres ga!arits *ui proposent une prdispositions des o!'ets graphi*ues: LinearLayout: dispose les lments de gauche droite ou du haut vers le !as elativeLayout: les lments enfants sont placs les uns par rapport aux autres *a$leLayout: disposition matricielle - +rameLayout: disposition en haut gauche en empilant les lments 4n composant graphi*ue peut tre : 1. La$el de te&te : -ext;iew En XML: <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:id="@+id/le_texte" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello" android:layout_gravity="center" /> </LinearLayout> Par la programmation: public class Activity2 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout gabarit = new LinearLayout(this); gabarit.setGravity(Gravity.CENTER); // centrer les lments graphiques gabarit.setOrientation(LinearLayout.VERTICAL); // empiler vers le bas ! TextView texte = new TextView(this); texte.setText("Programming creation of interface !"); gabarit.addView(texte); setContentView(gabarit);} 2. ,ones de te&te : %dit*e&t 3. Bouton : Button Button b = (Button)findViewById(R.id.Button01);// Boutton01 est !I" du #outon dans e fic$ier layout.xml 4. Image : Image(iew : 5. C-oi& multiple .C-ec/$o&0 : la mthode setChecked() permet de modifier l+tat de la case et la mthode isC-ec/ed.0 permet de vrifier si l+lment est slectionn$ ,ans le fichier xml : <CheckBox android:id="@+id/chk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/chk_android" android:checked="true" />

Enseignant B. Zaki CheckBox checkBox = (CheckBox) findViewById(R.id.chk); if (checkBox.isChecked()) {checkBox.setChecked(false); } Afin d+a'outer un vnement vote /hec<Box& il faut : =$ a'outer dans le fichier 23" cette ligne : android:onClick="onCheckboxClicked" : <CheckBox android:id="@+id/chk" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/chk_android" android:checked="true" android:onClick="onCheckboxClicked" /> >$ ,ans l+activit *ui utilise ce votre /hec<Box& il faut implmenter une mthode *ui poss(de le m me nom *ue la valeur de on)lick : onC-e/$o&Cli/ed public void onCheckboxClicked(View view) { // if un view est slectionn boolean checked = ((CheckBox) view).isChecked(); // vrifiant quel checkbox nous avons cliqu switch(view.getId()) { case R.id.checkbox_1: if (checked) // quelques chose ici break; case R.id.checkbox_2: if (checked) // quelques choses ici break; } 6. adioButton : les !outons radio doivent tre groups en utilisant adio)roup comme l+indi*ue l exemple suivant :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RadioGroup android:id="@+id/radioGender" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RadioButton android:id="@+id/genderMale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Male" android:checked="true" /> <RadioButton android:id="@+id/genderFemale" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Female" /> </RadioGroup> <Button android:id="@+id/btnDisplay" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Here" /> </LinearLayout>

Enseignant B. Zaki %t dans votre code : public class RadioButtonExample extends Activity implements OnClickListener{ private RadioGroup radioSexGroup; private RadioButton radioSexButton; private Button btnDisplay; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_radio_button_example); radioSexGroup = (RadioGroup) findViewById(R.id.radioGender); btnDisplay = (Button) findViewById(R.id.btnDisplay); btnDisplay.setOnClickListener(thi) ; public void onClick(View v) { // rcuprer lID du bouton radio slectionn int selectedId = radioSexGroup.getCheckedRadioButtonId(); // chercher le bouton radio dans le fichier XML radioSexButton = (RadioButton) findViewById(selectedId); Toast.makeText(RadioButtonExample.this,radioSexButton.getText(), Toast.LENGTH_SHORT).show(); } } 7. Liste : Liste(iew : Etant donn *u'une liste peut contenir des lments graphi*ues divers et varis& les lments de la liste doivent tre insrs dans un ListAdapter et il faut aussi dfinir le ga!arit *ui sera utilis pour afficher cha*ue lment du ListAdapter$ 1renons un exemple simple: une liste de chaine de caract(res$ ,ans ce cas& on cr un nouveau ga!arit monte&te et on a'oute dynami*uement un ArrayAdapter la liste list(iew1. %&emple : ListView list = (ListView)findViewById(R.id.listView1); ArrayAdapter<String> tableau = new ArrayAdapter<String>(list.getContext(), R.layout.montexte); for (int i=0; i<40; i++) { tableau.add("coucou " + i); } list.setAdapter(tableau);

Faire des actions


Afin de raliser des vnements& Andro?de utilise la m me logi*ue de )A;A : couteur (on/lic<"istener)& ce *u+on doit couter (set0n/lic<"istener)& et l+action (0n/lic<)$
public exempleAction extends Activity implements OnClickListener{ private Buttton b ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity) ; b = (Button) findViewById(R.id.Button01) ; b.setOnClickListener(this)// on indique que lactivit actuelle est lcouteur du bouton } /* OnClickListener propose la mthode onClick quon doit limplmenter afin de dfinir les actions*/ public void onClick(View v) { Toast.makeText(v.getContext(),"Bon courage", Toast.LENGTH_LONG).show(); //Toast permet dafficher un message dalerte }}

Principe des Intents


"es Intents permettent de grer la communication entre deux applications$ Ainsi& le !ut est de dlguer une action un autre composant& une autre application ou une autre activit de l'application courante$ 4n o!'et Intent contient les informations suivantes: le nom du composant ci!l (facultatif) l'action raliser& sous forme de chaine de caract(res - les donnes : contenu 3#3E et 4:# des donnes supplmentaires sous forme de paires clef8valeur une catgorie pour ci!ler un type d'application

Enseignant B. Zaki

des drapeaux (informations supplmentaires)

Lancer une nouvelle activit2 dans la m3me application : crer l'#ntent et passer la classe de l'activit ci!le par l'#ntent: Intent login = new Intent(this, GiveLogin.class); startActivity(login); Dans le constructeur, tthis reprsente le contexte de l application! Dans certain cas, il ne faut pas mettre this mais faire appel " getApplicationContext() si l ob#et manipulant l Intent n hriste pas de Context! Lancer une nouvelle activit2 dans autre application : on donne au constructeur de l $ntent les donnes et l %&$ cible' l O( est char) de trouver une application pouvant rpondre " l $ntent! *utton b + ,*utton-find.ie/*0$d,&!id!*utton12-3 b!setOnClickListener,this- 3 public void onClick,.ie/ v- 4 %ri telnumber + %ri!parse,5tel'16787871115-3// %&L cible $ntent call + new $ntent,$ntent!9C:$O;<D$9L, telnumber-3 start9ctivit0,call-3 =

Vous aimerez peut-être aussi