Android TP1 – 2018
Nous allons créer une première application, dont le but est de convertir des nombres entiers en binaire.
Partie 1
1. Créer un layout avec l’assistant graphique
Indication : Le layout ci-dessus est formé d’un LinearLayout vertical, contenant :
- un LinearLayout horizontal, contenant lui-même :
- une étiquette (TextView),
- et un champ de saisie EditText ;
- un Button,
- et un second LinearLayout horizontal, contenant aussi une étiquette et un champ de saisie.
On pourra aussi (dans l’éditeur graphique), utiliser un champ de saisie qui n’accepte que les nombres.
2. Créer les objets correspondants et les associer aux éléments du layout
import android.widget.Button; public class MainActivity extends Activity { private Button bGO; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bGO = (Button) this.findViewById(R.id.button1); }
NB : Attention à bien importer la classe Button du package android.widget (voir la première ligne du code ci-dessus).
On trouvera l’ID du bouton dans le fichier XML “layout”.
<Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" />
3. La classe Activity implémente l’interface de manipulation
import android.view.View.OnClickListener; public class MainActivity extends Activity implements OnClickListener { //... @Override public void onClick(View v) { // ... }
NB : Attention à bien importer l’interface OnClickListener du package android.widget.View
4. Associer les objets widgets à leur interface de manipulation
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bGO = (Button) this.findViewById(R.id.button1); bGO.setOnClickListener(this); }
5. Implémenter les méthodes de manipulation
import android.widget.Toast; //... @Override public void onClick(View v) { if (v.getId()==R.id.button1) Toast.makeText(getApplicationContext(), "Conversion !", Toast.LENGTH_SHORT).show(); }
6. Récupérer une valeur dans un champ de texte
On associe l’objet EditText avec son champ de saisie, en utilisant l’ID.
import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener { //... private EditText tfDecimal, tfBinaire; public void onCreate(Bundle savedInstanceState) { //.. tfDecimal=(EditText) this.findViewById(R.id.editText1); }
String chDecimal=tfDecimal.getText().toString(); int d=Integer.parseInt(chDecimal);
7. Écrire dans un champ de texte
Ne pas oublier d’associer l’objet EditText avec son champ de saisie, en utilisant l’ID comme précédemment.
tfBinaire.setText(""+convertInBinary(d));
Rappel : Conversion en binaire
(voir TD intensifs)
tantque n>0 faire si n%2=0 alors bin = "0" + bin sinon bin = "1" + bin finsi n=n/2 fait
Partie 2
1. Ajouter un second bouton
On souhaite ajouter un second bouton pour faire la conversion inverse. Que va-t-il se passer ?
2. Différencier le traitement des différents boutons
Pour différentier le bouton qui a déclenché un événement, on utilise la méthode getId() de l’objet View passé en argument de onClick (ce view est en fait l’objet qui a déclenché l’action, c’est à dire l’objet sur lequel on a cliqué).
public void onClick(View view) { if (view.getId()==R.id.bBIN) { // Traitement du bouton d'ID "bBIN" } // etc... traiter les autres cas (autres boutons) }
3. Terminer l’interface
- ajouter le second bouton pour convertir de binaire à décimal
- puis ajouter un bouton pour effacer les 2 champs
Rappel : convertir de binaire en décimal
On suppose que bin est une chaine en binaire
d <- 0 x <- 1 i <-longueur(bin) tantque i>0 faire i <- i-1 if bin[i] = '1' alors d=d+x finsi x <- x*2 fait
ou alors, plus simplement en java :
int dec=parseInt(bin, 2)
Partie 3
- Remplacez toutes les chaînes de caractères en dur dans votre appli par des références à des chaines situées dans le fichier strings.xml
- Localisez votre appli en français, anglais et si possible une autre langue (que vous connaissez)
- Testez votre appli en changeant la langue de votre machine virtuelle