D Veloppement Sous Android Part2
-
Upload
king-mehdinho -
Category
Documents
-
view
216 -
download
0
Transcript of D Veloppement Sous Android Part2
-
7/25/2019 D Veloppement Sous Android Part2
1/7
INTERFACESGRAPHIQUES
Partie 230
Dveloppement sous Android - Mlle TRIMECH R
Plan de la partie
Dans cette partie, nous traitons les points suivants :
Vues et gabarits
Les lments graphiques
Les listes
Les onglets
31
Dveloppement sous Android - Mlle TRIMECH R
Vue & Gabarits
Dveloppement sous Android - Mlle TRIMECH R
32
Les lments graphiques hritent de la classe View. On peut regrouper des
lments graphiques dans une ViewGroup. Des ViewGroupparticuliers sont
prdfinis: ce sont des gabarits (layout) qui proposent une prdispositions des
objets graphiques:
LinearLayout: dispose les lments de gauche droite ou du haut vers le bas
RelativeLayout: les lments enfants sont placs les uns par rapport aux autres
TableLayout: disposition matricielle
FrameLayout: disposition en haut gauche en empilant les lments
Les dclarations se font principalement en XML, ce qui vite de passer par les
instanciations Java.
Attributs des gabarits
Dveloppement sous Android - Mlle TRIMECH R
33
Les attributs les plus importants des gabarits sont:
android:layout_width et android:layout_height:
="fill_parent": l'lment remplit tout l'lment parent
="wrap_content": prend la place minimum ncessaire l'affichage
android:orientation: dfinit l'orientation d'empilement
android:gravity: dfinit l'alignement des lments Voici un exemple de LinearLayout:
-
7/25/2019 D Veloppement Sous Android Part2
2/7
Linterface comme ressource (1)
Dveloppement sous Android - Mlle TRIMECH R
34
Une interface graphique dfinie en XML sera aussi gnre comme une
ressource dans la classe statique R. Le nom du fichier xml, par exemple
accueil.xmlpermet de retrouver le layout dans le code java au travers de
R.layout.accueil.
Ainsi, pour associer la premire vue graphique l'activit principale de
l'application, il faut faire:
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acceuil);
}
Linterface comme ressource (2)
Dveloppement sous Android - Mlle TRIMECH R
35
Le layout reste modifiable au travers du code, comme tous les autres
objets graphiques. Pour cela, il est important de spcifier un id dans la
dfinition XML du gabarit (android:id="@+id/accueilid").
Cette remarque est aussi valable pour tous les autres objets graphiques.Ainsi, on peut accder cet lment par son id et agir dessus au travers
du code Java:
LinearLayout l = (LinearLayout)findViewById(R.id.accueilid);
l.setBackgroundColor(Color.BLACK);
Les lments graphiques
Dveloppement sous Android - Mlle TRIMECH R
36
Un gabarit peut contenir des lments graphiques, ou d'autres gabarits. On
retrouve le mme principe que les tableaux imbriqus de l'HTML.
Les interfaces peuvent aussi inclure d'autres interfaces, permettant de factoriser
des morceaux d'interface. On utilise dans ce cas le mot clef include:
Les labels de texte
Dveloppement sous Android - Mlle TRIMECH R
37
En XML En programmation
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout gabarit = newLinearLayout(this);
// centrer les lments graphiques
gabarit.setGravity(Gravity.CENTER);
// empiler vers le bas!
gabarit.setOrientation(LinearLayout.VERTICAL);
TextView texte = newTextView(this);
texte.setText("cration dune interface!");
gabarit.addView(texte);
setContentView(gabarit);
}
-
7/25/2019 D Veloppement Sous Android Part2
3/7
Zone de texte
38
Dveloppement sous Android - Mlle TRIMECH R
En XML
En programmation
EditText edit = new
EditText(this);
edit.setText("Edit me");
gabarit.addView(edit);
edit.addTextChangedListener(new TextWatcher()
{
@Override
public voidonTextChanged(CharSequence s,
intstart,intbefore, intcount) {
// do something here
}
}
);
Interception dvnements
Les labels de texteLes images
Dveloppement sous Android - Mlle TRIMECH R
39
En XML En programmation
ImageView image = newImageView(this);
image.setImageResource(R.drawable.logo);
gabarit.addView(image);
Les boutons
Dveloppement sous Android - Mlle TRIMECH R
40
-
7/25/2019 D Veloppement Sous Android Part2
4/7
Les Listes (2)
Dveloppement sous Android - Mlle TRIMECH R
42
Etant donn qu'une liste peut contenir des lments
graphiques divers et varis, les lments de la liste doivent
tre insrs dans un ListAdapter et il faut aussi dfinir legabarit qui sera utilis pour afficher chaque lment du
ListAdapter.
Les Listes (3)
Dveloppement sous Android - Mlle TRIMECH R
43
Prenons un exemple simple: une liste de chaine de caractres. Dans ce cas, on
cr un nouveau gabarit montexte et on ajoute dynamiquement un
ArrayAdapter la liste listView1. Le gabarit suivant doit tre plac dans
montexte.xml:
Les Listes (4)
Dveloppement sous Android - Mlle TRIMECH R
44
Le code de l'application qui cr la liste peut tre:
ListViewlist= (ListView)findViewById(R.id.listView1);
ArrayAdapter tableau =new
ArrayAdapter(list.getContext(), R.layout.montexte);
for(inti=0; i
-
7/25/2019 D Veloppement Sous Android Part2
5/7
Les Listes plus complexes (2)
Dveloppement sous Android - Mlle TRIMECH R
46
Layout d'une ligne de liste
Les Listes plus complexes (2)
Dveloppement sous Android - Mlle TRIMECH R
47
Layout de la liste
Les Listes plus complexes (3)
Dveloppement sous Android - Mlle TRIMECH R
48
Lorsque les listes contiennent un layout plus complexe qu'un texte, il faut
utiliser un autre constructeur de ArrayAdapter (ci-dessous) o resource
est l'id du layout appliquer chaque ligne et textViewResourceIdest l'id
de la zone de texte inclus dans ce layout complexe.
ArrayAdapter (Context context, int resource, int textViewResourceId)
Les Listes plus complexes (4)
Dveloppement sous Android - Mlle TRIMECH R
49
A chaque entre de la liste, la vue gnre utilisera lelayout complexe et la zone de texte contiendra la string
passe en argument la mthode add.
ListViewlist= (ListView)findViewById(R.id.maliste);
ArrayAdapter tableau =new ArrayAdapter(
list.getContext(), R.layout.ligne, R.id.monTexte);
for(inti=0; i
-
7/25/2019 D Veloppement Sous Android Part2
6/7
Les onglets (1)
Dveloppement sous Android - Mlle TRIMECH R
50
La ralisation d'onglets permet de mieux utiliser l'espace rduit
de l'cran.
Pour raliser les onglets, il faut suivre une structure trs
particulire pour le gabarit. Les diffrents onglets sont ensuite
crs dynamiquement par le code, en associant chaque onglet
l'activit correspondante.
Remarque : Dans ce qui suit, une explication du principe qui
peut dpendre de lAPI utilise.
Les onglets (2)
Dveloppement sous Android - Mlle TRIMECH R
51
La dfinition du gabarit doit tre la suivante:
Les onglets (3)
Dveloppement sous Android - Mlle TRIMECH R
52
IMPORTANT :
Certains ids sont imposs lorsqu'on utilise des onglets:
TabHost : android:id= "@android:id/tabhost" TabWidget : android:id= "@android:id/tabs"
FrameLayout : android:id= "@android:id/tabcontent"
Les onglets (4)
Dveloppement sous Android - Mlle TRIMECH R
53
L'activit qui gre l'ensemble des onglets est une activit
spciale hritant de TabActivity. Le gabarit prcdent est
donc associ une classe dfinir hritant de TabActivity:
public classAndroTabs2Activity extendsTabActivity {
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
...
-
7/25/2019 D Veloppement Sous Android Part2
7/7
Les onglets (5)
Dveloppement sous Android - Mlle TRIMECH R
54
Chaque onglet contient, dans sa partie du bas, une activit qu'il convient
de crer. Pour chaque activit, il faut donc dfinir une classe d'activit et
lui associer son gabarit:public classActivityOnglet1 extendsActivity {
public voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.onglet1);
}}
layout onglet1.xml
Activit de onglet1
Les onglets (6)
Dveloppement sous Android - Mlle TRIMECH R
55
Ensuite, dans l'activit principale hritant de TabActivity, il faut crer
dynamiquement les onglets et les remplir:
TabHosttabHost= getTabHost();TabHost.TabSpecspec;
Intent intent;
// Cration de l'intent lancant l'activit de l'ongletintent = newIntent().setClass(this, ActivityOnglet1.class);
// Cration dynamique d'une configuration pour l'onglet 1spec = tabHost.newTabSpec("Onglet 1");
spec.setContent(intent); // Associer l'intent l'ongletspec.setIndicator("Onglet 1"); // Ajouter un texte dans l'onglet
tabHost.addTab(spec); // Ajout de l'onglet...// Choisir l'onglet par dfaut
tabHost.setCurrentTab(0);
NE PAS OUBLIER DE DCLARER LES ACTIVITS DANS LE MANIFEST