wieslaw zielonka programmation de composants

26
WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID)

Upload: duongkhuong

Post on 05-Jan-2017

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA

PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID)

Page 2: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Messages log (débogage)

méthode type de message

Log.e() error

Log.w() warning

Log.i() information

Log.d() debug

Log.v() verbose

private static final string TAG=“MyApp“; Log.w(TAG, ’’compteur=“ + compteur);

Deux paramètres String: un tag et un massage.

Page 3: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Toast - afficher un message sur l’écranContext context = getApplicationContext();CharSequence message = "click plus"; Toast toast = Toast.makeText(context, message, Toast.LENGTH_LONG);toast.show();

Affiche le message en bas d’écran.

On peut changer la position avec la méthode setGravity()

toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0); toast.show();

Page 4: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Views• Button

• TextView - texte non-modifiable

• EditText — texte modifiable

Page 5: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

EditText

<EditText android:id="@+id/rue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="rue" android:lines="1" android:imeOptions="actionNext" android:inputType="text" />

• android:hint — un indice (message) initial affiché dans EditText • android:imeOptions — ime = input méthode, typiquement actionNext (le

curseur passe sur EditText suivant) ou actionSend, • android:inputType — type d’entrée : text, textPassword, number, numberDecimal, etc.

Mettre un texte dans EditText :

Page 6: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Mettre un texte dans EditText

EditText edittext = (EditText) findIdByName(R.id.rue); edittext.setText("Rivoli");

Page 7: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

EditText — récupérer le contenu

La méthode getText() de EditText : Editable getText();

Pour obtenir un String appliquer toString().

L'objet Editable possède les méthodes:

• Editable append(CharSequence tx) • void clear() • Editable delete(int st, int end) • void setFilters(InputFilter[] filters) • Editable insert(int where, CharSequence text) • Editable replace(int st, int en, CharSequence tt) remplace le texte entre st et en par tt.

Page 8: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

EditText - les filtres EditText edit = ( EditText ) findViewById(R.id.edit) ; edit.setFilters(new InputFilter[ ], new InputFilter.AllCaps( ) , new InputFilter.lengthFilter( 2 ) ) ;

Installation de deux filtres, le premier met les lettres en majuscules, le deuxième limite la longueur du texte à 2 caractères. Ce sont les deux seuls filtres déjà implémentés par Android. La class InputFilter possède la méthode

CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend) permettant d'implémenter d'autres filtres par vos soins.

Page 9: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Installer un listener sur EditText

EditText numero, rue, ville, code; String ttNumero, ttRue, ttVille, ttCode;

rue = (EditText) findViewById(R.id.rue);

rue.setOnEditorActionListener( new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.d(tag, "rue listener"); if (actionId == EditorInfo.IME_ACTION_NEXT) { Log.d(tag,"rue action next"); ttRue = rue.getText().toString(); numero.requestFocus(); return true; } return false; } } ); Il s'agit d'un listener activé par le bouton ENTER. Il existe d'autres listeners pour EditText.

Page 10: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Attributs obligatoires de layout ou view

• android:layout_width

• android:layout_height

Valeurs :

• match_parent — aussi grand que le parent (moins padding)

• wrap_content — suffisamment grand pour le contenu

• valeurs : 10dp (dp = densité indexent pixels), 30sp (sp - scalled pixels, pour la taille de texte),

Page 11: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Attributs margin (facultatif)

nom de l'attributs

android:layout_marginBottom

android:layout_marginTop

android:layout_marginLeft

android:layout_marginRight

android:layout_marginStart

android:layout_marginEnd

margin - spécifie la marge autour à l'extérieur d'un composant

Page 12: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Attributs padding (facultatif)

attributs padding

android:paddinngBottom

android:paddingTop

android:paddingLeft

android:paddingRight

android:paddingStart

android:paddingEnd

padding - la marge autour de contenu à l'intérieur de composant

Page 13: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

LAYOUTS

Layout - gestionnaire de position, gère les positions des enfants (views, d'autres layouts)

• LinearLayout

• FrameLayout

• GridLayout

• RelativeLayout

Page 14: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

LinearLayoutAttributs XML de LinearLayout:

android:orientation soit "vertical" soit "horizontal"

android:gravity spécifie comment l'objet positionne le contenu : top bottom left right center_vertical center_horizontal fill_vertical fill_horizontal center fill

android:weightSum

valeur : un flottant. En combinaison avec layout_weight d'un enfant permet de spécifier la part de l'enfant. Par exemple si weighSum="1.0" et layout_weight de l'enfant "0.5" alors ce enfant prendra 50% de l'espace de layout

Page 15: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

LinearLayoutAttributs XML de l'enfant de LinearLayout:

android:layout_gravity les constantes que l'enfant passe au parent : top bottom left right center_vertical center_horizontal fill_vertical fill_horizontal center fill "top|left"

android:layout_weight Le poid de l'enfant.

Page 16: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

RelativeLayoutRelativeLayout permet de spécifier les positions des enfants un par rapport à l'autre. On met les attributs spécifiques dans les enfants de RelativeLayout. La site des attributs pour les enfants se trouve dans RelativeLayout.LayoutParams.

Attributs XML à mettre dans les enfants de RelativeLayout:

android:layout_above android:layout_above="@id/toto" au-dessus d'un élément dont id est toto

android:layout_alignBottom Alignement de bottom avec la bottom d'un autre view.

android:layout_alignTop

android:layout_alignLeft

android:layout_alignRight le bord droit de ce view s'aligne avec le nord droit d'un autre view

Page 17: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

RelativeLayoutAttributs XML à mettre dans les enfants de RelativeLayout:

android:layout_below android:layout_below="@id/toto" au-dessous d'un élément dont id est toto

android:layout_alignParentBottom valeurs : soit "true" soit "false

android:layout_alignParentTop idemandroid:layout_alignParentLeft idem

android:layout_alignParentRight idem

android:layout_toLeftOf android:layout_toLeftTo="@id/toto" à gauche de toto

android:layout_toRightOf idem à droite

Page 18: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

SANS RÉSULTAT DE RETOUR

Démarrer une nouvelle activité

void startActivity(Intent intent)

void startActivity(Intent intent, Bundle options)

Les deux méthodes appartiennent à la class Context. Mais Activity hérite de la classe Context donc on peut appeler startActivity() dans Activity.

Intent — une sorte de message pour activer une nouvelle activité, contient "l'adresse de destinateur" et des données.

Page 19: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Préparer Intent explicite

Intent "explicite" pour activer une activité précise.

Constructeurs:

Intent()

Intent(Context context, Class<?> csl)

Page 20: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Démarrer une nouvelle activité

de la même applicationDans MainActivity (activité appelante):

Intent intent = new Intent();intent.setClassName("fr.liafa.zielonka.newactivity", "fr.liafa.zielonka.newactivity.Superposer");intent.putExtra(COLOR, s); intent.putExtra(ALPHA, alpha); startActivity(intent);

la méthode setClassName() permet de spécifier l'activité destinataire (c'est l'activité Superposer), deux paramètres :le nom du package et le nom de l'activité destinataire (avec le package).

putExtra(String key, ? valeur) ajoute les données sous forme (key,value) dans Intent

Page 21: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Démarrer une nouvelle activité

de la même application (une autre variante)

Dans MainActivity (activité appelante): à la place de

Intent intent = new Intent();intent.setClassName("fr.liafa.zielonka.newactivity", "fr.liafa.zielonka.newactivity.Superposer");

faire

Intent intent = new Intent(this, Superposer.class);

parce que Activity est dérivée de Context parce que Superposer est

la nouvelle activité

Page 22: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

Dans l'activité appeléeprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_superposer);

/* récupérer Intent qui a démarré cette activité*/ Intent intent = getIntent(); /* récupérer une donnée avec une méthode get appropriée*/ float alpha = intent.getFloatExtra(MainActivity.ALPHA, 1.0f); String s = intent.getStringExtra(MainActivity.COLOR);

Pour récupérer les valeurs qui se trouvent dans Intent les méthodes :

TypeValeur getTypeValeurExtra(String clé, valeur_par_defaut)

où TypeValeur dépend du type de la valeur stockée dans Extra. Intent contient aussi la méthode

Bundle getExtras()

qui retourne un Bundle avec tous les extras.

Page 23: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

SpinnerDans le fichier layout : <Spinner android:id="@+id/spin1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:entries="@array/hex" />

l'attribut :android:entries="@array/hex" indique que les Strings affichés dans Spinner viennent d'un tableau de resources, app/res/values/strings.xml contient

<string-array name="hex"> <item>F</item><item>E</item><item>D</item><item>C</item> <item>B</item><item>A</item> <item>9</item><item>8</item><item>7</item><item>6</item> <item>5</item><item>4</item> <item>3</item><item>2</item><item>1</item><item>0</item> </string-array>

Page 24: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

SpinnerDans java :

Spinner spin1; spin1 = (Spinner) findViewById(R.id.spin1);

/* pour récupérer le String sélectionné dans Spinner */

String dig1 = spin1.getSelectedItem().toString();

Page 25: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

CheckBox

Dans layout :

<CheckBox android:id="@id/red" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/text" android:textSize="@dimen/tailleText" android:text="@string/red" />

pour avoir les dimensions des textes uniformes dans app/res/values/dimens.xml

on ajoute la ligne :<dimen name="tailleText">30sp</dimen>

Page 26: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS

CheckBoxDans java :

CheckBox red = (CheckBox) findViewById(R.id.red); String s = "#"; s += red.isChecked() ? "FF" : "00";

isChecked() est true si CheckBox sélectionné.