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>