wieslaw zielonka programmation de composants
TRANSCRIPT
![Page 1: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/1.jpg)
WIESLAW ZIELONKA WWW.IRIF.UNIV-PARIS-DIDEROT.FR/~ZIELONKA
PROGRAMMATION DE COMPOSANTS MOBILES (ANDROID)
![Page 2: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/4.jpg)
Views• Button
• TextView - texte non-modifiable
• EditText — texte modifiable
![Page 5: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/6.jpg)
Mettre un texte dans EditText
EditText edittext = (EditText) findIdByName(R.id.rue); edittext.setText("Rivoli");
![Page 7: WIESLAW ZIELONKA PROGRAMMATION DE COMPOSANTS](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022051505/586e015e1a28ab02688b590d/html5/thumbnails/26.jpg)
CheckBoxDans java :
CheckBox red = (CheckBox) findViewById(R.id.red); String s = "#"; s += red.isChecked() ? "FF" : "00";
isChecked() est true si CheckBox sélectionné.