Gestionnaire d'événement dans l'activité principale avec spécification de la méthode dans le fichier XML
Dans cet exemple, l'assignation du gestionnaire se fait dans le fichier XML de mise en page. La classe principale n'a plus besoin d'implémenter View.OnClickListener, mais le gestionnaire spécifié par l'attribut android:onClick doit obligatoirement être une méthode public void et avoir un paramètre de type View.
MainActivity.java
package net.codeandroid.couleur5;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import java.util.Random;
// Affiche une couleur aléatoire lorsque l'on clique sur un bouton (gestion du clic
// par l'activité principale avec assignation du gestionnaire dans le fichier de
// mise en page (XML).
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);
}
// gestionnaire
public void colorer(View v) {
// 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:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="@string/label_bouton"
android:onClick="colorer"/>
<TextView
android:id="@+id/zone_couleur"
android:layout_height="match_parent"
android:layout_width="match_parent"/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Couleur 5</string>
<string name="label_bouton">Couleur magique</string>
</resources>