• Aucun résultat trouvé

[PDF] Développement mobile avec Android : Widgets et layout - Free PDF Download

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Développement mobile avec Android : Widgets et layout - Free PDF Download"

Copied!
38
0
0

Texte intégral

(1)
(2)

Widgets & layout

Utiliser l’XML pour le layout

Labels, boutons & champs LinearLayout

RelativeLayout TableLayout

Date et Time pickers Onglets

(3)

UTILISER DE L’XML POUR LE LAYOUT

• Il est possible d’instancier ses composants depuis Java, mais l’XML est une approche commune.

• Les layouts sont définis dans res/layout/

• L’XML contient un arbre d’éléments, qui spécifient le layout et les widgets qui forment la View.

• Les éléments XML contiennent des attributs, souvent avec le namespace android

(4)

POURQUOI DES LAYOUTS XML?

• GUI builder dans Eclipse

• Les données sont structurées et faciles à lire : maintenance facile • Separation de IHM et code

• L’XML est souvent utilisé pour définir des IHM

(5)

CHOSES SPECIFIQUES XML

• android:id="@+id/myId" assigne myId comme id d’un widget ou layout

• References aux resources, strings (chaines) et autres id: • @drawable/myImage pointera vers myImage.png dans res/drawable

• @string/app_name pointera vers app_name dans res/values/strings.xml

(6)

Widgets & layout

Utiliser l’XML pour le layout

Labels, boutons & champs

LinearLayout RelativeLayout TableLayout

Date et Time pickers Onglets

(7)

LABELS: TEXTVIEW

• TextView widget

• propriétés souvent utilisées:

• android:text

• android:typeFace

• android:textStyle (bold, italic or bold_italic)

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Bonjour tout le monde !"

(8)

BUTTONS • Button widget • Hérite de TextView <Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Valider" />

(9)

CHAMPS : EDITTEXT • Widget EditText • Hérite de TextView • Propriétés: • android:autoText • android:capitalize • android:digits • android:singleLine • android:numeric • android:phoneNumber • android:password

• android:inputType («number», «phone»,...) • android:hint <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/field" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="text" android:singleLine="false" />

(10)

CHECKBOX

• Widget CheckBox

• Hérite de CompoundButton

• Possible d’alterer la valeur depuis le code:

• isChecked() • setChecked() • toggle()

• Possible d’enregistrer un event listener

(11)

EXEMPLE DE CHECKBOX

• Exemple à mettre dans le fichier xml correspondant

<CheckBox

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/check"

android:layout_width="wrap_content"

android:layout_height="wrap_content" android:text="Cochez Moi"

(12)

EXEMPLE CHECKBOX

public class MainActivity extends Activity implements OnCheckedChangeListener {

CheckBox cb;

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.activity_main);

cb = (CheckBox) findViewById(R.id.check);

cb.setOnCheckedChangeListener(this); }

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if (buttonView == cb) {

if (isChecked)

cb.setText("Je suis Coché");

else

cb.setText("Je suis Décoché"); }

} }

(13)

RADIOBUTTON

• Widget RadioButton

• Hérite de CompoundButton

• Les radiobuttons doivent toujours être mis dans un

RadioGroup

• Fonctions sur un RadioGroup

• check() • clearCheck() • getCheckedRadioButtonId() • setOnCheckedChangeListener (RadioGroup.OnCheckedChangeListener listener)

(14)

EXEMPLE RADIOBUTTON <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Or" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Argent" /> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Diamant" /> </RadioGroup>

(15)

Widgets & layout

Utiliser l’XML pour le layout Labels, boutons & champs

LinearLayout

RelativeLayout TableLayout

Date et Time pickers Onglets

(16)

CONTENEUR

• Utilisé pour mettre des widgets ensembles d’après un layout spécifique

• Des conteneurs peuvent avoir des conteneurs comme enfants • Exemples

• LinearLayout : «box model»

• RelativeLayout: basé sur des règles • TableLayout: basé sur une grille

(17)

LINEARLAYOUT

• Similaire au FlowLayout en Java et HBox/VBox en Adobe Flex • Les widgets sont alignés en colonnes ou rangées

• Conteneurs: 5 points de contrôle: • Orientation

• Modèle de remplissage • Poids

• Gravité

(18)

CONTENEURS: ORIENTATION • android:orientation="vertical|horizontal" • via code: • setOrientation() • Paramètres: • LinearLayout.HORIZONTAL • LinearLayout.VERTICAL

(19)

CONTENEURS: MODELE DE REMPLISSAGE

• android:layout_width and android:layout_height • Dimensions

• Fixes: 125px, 300dip,...

• Wrapper le contenu: wrap_content

(20)

CONTENEURS: EXEMPLE DE MODELE DE REMPLISSAGE

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#111177" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#117711"

android:text="LinearLayout avec fill_parent"

android:color="#FFFFFF" /> </LinearLayout>

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#111177" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"

android:text="LinearLayout avec wrap_content"

android:color="#FFFFFF" /> </LinearLayout>

(21)

CONTENEURS : POIDS

• Comment partager l’espace disponible entre widgets • android:layout_weight EXEMPLE DE POIDS : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android " android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.66" android:text="Button 1" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.33" android:text="Button 2" /> </LinearLayout> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="Button 1" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.5" android:text="Button 2" /> </LinearLayout>

(22)

CONTENEURS : GRAVITE

• android:layout_gravity

• Comment aligner le widget vis-à-vis de l’écran • center_horizontal

• center_vertical • right

• ...

(23)

CONTAINEURS : ESPACEMENT • android:padding • android:paddingLeft • android:paddingRight • android:paddingTop • android:paddingBottom • whitespace entre widgets • setPadding() via code

(24)

EXEMPLE DE LAYOUT DE CONTENEUR <RadioGroup android:id="@+id/gravity" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5px" > <RadioButton android:id="@+id/left" android:text="left" /> <RadioButton android:id="@+id/center" android:text="center" /> <RadioButton android:id="@+id/right" android:text="right" /> </RadioGroup> </LinearLayout> <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/orientation" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="5px" > <RadioButton android:id="@+id/horizontal" android:text="horizontal" /> <RadioButton android:id="@+id/vertical" android:text="vertical" /> </RadioGroup>

(25)

Widgets & layout

Utiliser l’XML pour le layout

Labels, boutons & champs LinearLayout

RelativeLayout TableLayout

Date et Time pickers Onglets

(26)

RELATIVELAYOUT

• Conteneur RelativeLayout

• Permet le positionnement relatif par rapport: • Au conteneur

• Aux autres widgets

(27)

RELATIF AU LAYOUT

• Possible en mettant une des propriétés suivantes:

• android:layout_alignParentTop • android:layout_alignParentBottom • android:layout_alignParentLeft • android:layout_alignParentRight • android:layout_centerHorizontal • android:layout_centerVertical • android:layout_centerParent

(28)

RELATIF AUX AUTRES WIDGETS

• Properties qui controlent le positionnement relatif aux autres widgets:

• android:layout_above • android:layout_below • android:layout_toLeftOf • android:layout_toRightOf

• Chacune de ces propriétés prend une référence vers un id en valeur.

(29)

RELATIF AUX AUTRES WIDGETS

• Properties qui controlent l’alignement des widgets par rapport aux autres widgets:

• android:layout_alignTop

• android:layout_alignBottom • android:layout_alignLeft

• android:layout_alignRight • android:layout_alignBaseline

• Chacune de ces propriétés prend une référence vers une autre id en valeur

(30)

RELATIVELAYOUT : POINTS D’ATTENTION

• Il est seulement possible de référencer des widgets qui ont été définis avant celui que vous utilisez.

• Attention à fill_parent / match_parent Celui-ci pourrait utiliser l’espace entier et rendre invisible d’autres widgets

(31)

RELATIVELAYOUT: EXEMPLE <Button android:id="@+id/ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/entry" android:layout_below="@id/entry" android:text="OK" /> <Button android:id="@+id/annuler" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/ok" android:layout_toLeftOf="@id/ok" android:text="Annuler" /> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5px" > <TextView android:id="@+id/label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="15px" android:text="URL:" /> <EditText android:id="@+id/entry" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBaseline="@id/label" android:layout_toRightOf="@id/label" />

(32)

Widgets & layout

Utiliser l’XML pour le layout Labels, boutons & champs LinearLayout

RelativeLayout

TableLayout

Date et Time pickers Onglets

(33)

TABLELAYOUT

• Conteneur TableLayout

• Similaire aux tables en HTML

• Les rangs sont contrôlés par vous via le conteneur TableRow • Les colonnes sont contrôlées par Android

• Une colonne = un widget

• Les widgets peuvent s’étendre sur plusieurs colonnes :

android:layout_span

• L’assignement des colonnes est automatique • Mais peut aussi être assigné manuellement :

(34)

TABLELAYOUT

• Les colonnes peuvent avoir des tailles différentes

• La taille peut être contrôlée en utilisant diverses propriétés sur

TableLayout:

• android:stretchColumns

• via code: setColumnStretchable(int

index,bool true/false)

• android:shrinkColumns

• via code: setColumnShrinkable(int

index,bool true/false)

• android:collapseColumns

(35)

EXEMPLE DE TABLELAYOUT <TableLayout xmlns:android="http://schemas.android.com/apk/re s/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow>

<TextView android:text="URL:" />

<EditText android:id="@+id/entry" android:layout_span="3" /> </TableRow> <View android:layout_height="2px" android:background="#0000FF" /> <TableRow> <Button android:id="@+id/annuler" android:layout_column="2" android:text="Annuler" /> <Button android:id="@+id/ok" android:text="OK" /> </TableRow>

(36)

SCROLLVIEW

• TableLayout, LinearLayout or RelativeLayout peuvent prendre plus de place que disponible à l’écran.

• Il est possible d’utiliser un ScrollView pour du scrolling automatique

• ScrollView pour scrolling vertical

• HorizontalScrollView pour scrolling horizontal • Pas de scrolling diagonal

(37)

EXAMPLE SCROLLVIEW <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="0" > <TableRow> <View android:layout_height="80px" android:background="#000000" /> <TextView android:layout_gravity="center_vertical" android:paddingLeft="4px" android:text="#000000" /> </TableRow> <TableRow> <View android:layout_height="80px" android:background="#440000" /> <TextView android:layout_gravity="center_vertical" android:paddingLeft="4px" android:text="#440000" /> </TableRow> </TableLayout> </ScrollView>

(38)

EXERCICE

• Créez un formulaire avec un edittext, un checkbox et un radio button group

• Faites que le checkbox soit sélectionné par défaut • Ajoutez 3 possibilités: pierre, papiers et ciseaux • Faites que ciseaux soit sélectionné par défaut

• Lorsque pierre, papier ou ciseaux est sélectionné, la valeur est affiché dans un label en dessous des radio buttons

Références

Documents relatifs

Houve variabilidade entre os clones quanto a classificação de grãos e rendimento, sendo que o clone 12 apresentou bom rendimento, alta porcentagem de grãos com peneira superior a 13

Cécile Asanuma-Brice, «  Fukushima, l’impossible retour dans les villages de l’ancienne zone d’évacuation : l’exemple d’Iitate  », Géoconfluences, octobre

z Lors d’un symposium qui s’est tenu à Fukushima le 27 février 2016 sur la question de la possibilité ou non de revenir vivre dans le village d’Iitate (préf. Fukushima),

Induction of an antiviral innate immune response relies on pattern recognition receptors, including retinoic acid-inducible gene 1-like receptors (RLR), to detect invading

Le recours aux droits de la personne pour assurer la protection des minorités religieuses constitue une technique traditionnelle. Les deux droits fondamentaux habituellement

Association of isometric viruslike particles, restricted to laticifers, with meleira (sticky disease) of papaya (Carica papaya). Etiologia e estratégias de controle de viroses

décroître l'efficacité de l'antibiotique, en raison de la sélection naturelle de bactéries résistantes. Dans ce contexte, les producteurs d'antibiotiques ne s'intéressent qu'au

نافرعو ركش لك لىإ نانتملااو ركّشلاب مّدقتأ نأ لاإ ماقلما اذى في نيعسي لا بيأ مهتمّدقم فيو ديعب وأ بيرق نم ةدعاسلما دي لي ّدمأو نيمعد نم لياغلا - لي