wieslaw zielonka programmation de composants

Post on 05-Jan-2017

230 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID)

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.

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();

Views• Button

• TextView - texte non-modifiable

• EditText — texte modifiable

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 :

Mettre un texte dans EditText

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

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.

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.

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.

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

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

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

LAYOUTS

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

• LinearLayout

• FrameLayout

• GridLayout

• RelativeLayout

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

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.

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

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

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.

Préparer Intent explicite

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

Constructeurs:

Intent()

Intent(Context context, Class<?> csl)

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

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é

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.

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>

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();

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>

CheckBoxDans java :

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

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

top related