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

Layout appli conversion binaire

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

Layout appli conversion

  • 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