Exemples de code Android

Gestionnaire d'événement dans une classe distincte de l'activité principale

Cet exemple utilise comme gestionnaire d'événement une classe distincte de l'activité principale. Il y aura donc deux fichiers sources : celui de l'activité et celui du gestionnaire de clics. L'avantage de cette approche est que le gestionnaire est "faiblement couplé" à l'activité principale. Résidant dans un fichier séparé, il pourrait très bien être utilisé dans un autre projet.

MainActivity.java

package net.codeandroid.couleur1;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

// Affiche une couleur aléatoire lorsque l'on clique sur un bouton (utilisation
// d'une classe externe comme gestionnaire d'événement).
public class MainActivity extends AppCompatActivity {

    // zone d'affichage de la couleur
    private View mZoneCouleur;
    // couleurs disponibles
    private int[] mCouleur = {
            Color.BLACK, Color.BLUE, Color.CYAN, Color.DKGRAY,
            Color.GRAY, Color.GREEN, Color.LTGRAY, Color.MAGENTA,
            Color.RED, Color.WHITE, Color.YELLOW};

    // point d'entrée de l'application
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // chargement de la mise en page
        setContentView(R.layout.activity_main);

        // récupération des composants depuis le fichier de mise en page
        mZoneCouleur = findViewById(R.id.zone_couleur);
        Button bouton = (Button) findViewById(R.id.bouton);

        // assignation du gestionnaire de clic (classe externe)
        bouton.setOnClickListener(new PeintreMagique(mCouleur, mZoneCouleur));
    }
}

PeintreMagique.java

package net.codeandroid.couleur1;

import android.view.View;

import java.util.Random;

// Gère le clic sur une bouton.
public class PeintreMagique implements View.OnClickListener {

    // tableau des couleurs disponibles
    private int mCouleur[];
    // vue à colorer
    private View mZoneCouleur;

    // constructeur
    public PeintreMagique(int couleur[], View zoneCouleur) {
        mCouleur = couleur;
        mZoneCouleur = zoneCouleur;
    }

    // gestionnaire d'événement
    @Override
    public void onClick(View vue) {
        // choisit aléatoirement une couleur
        Random generator = new Random();
        int index = generator.nextInt(mCouleur.length);

        // change la couleur d'arrière-plan de la vue
        mZoneCouleur.setBackgroundColor(mCouleur[index]);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/bouton"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:text="@string/label_bouton"/>
    <TextView
        android:id="@+id/zone_couleur"
        android:layout_height="match_parent"
        android:layout_width="match_parent"/>
</LinearLayout>

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Couleur 1</string>
    <string name="label_bouton">Couleur magique</string>
</resources>