Les applications Android sont généralement divisées en zones fonctionnelles, chacune étant liée à une classe d'activité qui dicte l'affichage et le comportement d'un écran spécifique. Parfois, vous souhaitez informer de manière conditionnelle l'utilisateur ou lui demander une entrée spécifique, mais vous ne souhaitez pas afficher ces informations à l'écran. Ici, vous avez deux choix fondamentaux: vous pouvez lancer une classe d'activité enfant pour un résultat spécifique, puis revenir à votre activité d'origine, ou vous pouvez utiliser une fonctionnalité pratique disponible pour les classes d'activité: dialogues.
Aujourd'hui, nous allons parler des dialogues, de leur utilité, de la manière dont ils sont créés et utilisés. Nous allons ensuite suivre les étapes de la mise en œuvre d'un dialogue de base dans une classe d'activité du début à la fin. Nous allons suivre ce tutoriel avec quelques recettes QuickTut pour différents types de boîtes de dialogue que vous pouvez utiliser dans vos applications Android typiques. Mais vous devez d'abord comprendre le cycle de vie d'un dialogue d'activité..
La classe Android Dialog (android.app.Dialog) est la classe de base pour tous les types de commandes de dialogue que vous pouvez utiliser dans vos classes d'activité. Les dialogues vivent dans le cycle de vie de votre activité (android.app.Activity). Ils apparaissent au premier plan, bloquant votre écran d'activité, pour attirer l'attention de l'utilisateur pour diverses raisons..
Remarque sur la pérennisation de vos applications et la création d'applications prenant en compte les fragments: Ce tutoriel utilisera la méthode traditionnelle de gestion des dialogues de base dans une activité simple. Certaines de ces méthodes ont récemment été déconseillées. La documentation du SDK Android recommande désormais que, si vous souhaitez utiliser des boîtes de dialogue, vous devez installer la bibliothèque de compatibilité et utiliser plutôt la classe DialogFragment. Une fois que vous avez maîtrisé les bases du cycle de vie de Dialog, vous devez également consulter la classe DialogFragment (android.app.DialogFragment). Cependant, cette approche sort du cadre de cette discussion de dialogue de base car elle nécessite l’installation et l’utilisation de la bibliothèque de compatibilité afin de prendre en charge les dialogues dans les versions antérieures du SDK Android (nous en parlerons dans un prochain tutoriel). Bien que les méthodes dont nous discutons ici soient répertoriées comme étant déconseillées, la nouvelle méthode de dialogue n'a pas été introduite jusqu'à Honeycomb. Cette solution continuera donc à fonctionner correctement sur tous les appareils..
Les dialogues sont utiles lorsque vous souhaitez:
Une note sur les messages de pain grillé: Certains développeurs utilisent également les messages Toast (android.widget.Toast) pour envoyer des notifications simples ou des messages à l'utilisateur. Un message de pain grillé s'affiche sur votre écran d'activité pendant quelques secondes, puis disparaît automatiquement. L'utilisateur n'a aucune chance d'interagir avec un message Toast. Nous aimons penser que la ligne de démarcation entre le moment d’utiliser un Toast sur un dialogue est la suivante: si l’utilisateur est informé d’informations non essentielles, utilisez un Toast, mais lorsque les informations présentées sont vitales, utilisez un dialogue. Nous utilisons Toasts comme des notifications d’information très légères. Toute information que vous souhaitez vous assurer que l’utilisateur reconnaît doit être affichée à l’aide d’un dialogue nécessitant leur participation active pour être rejetée..
Un exemple de message Toast est présenté ci-dessous:
Les boîtes de dialogue ont un certain nombre de composants différents, dont la plupart sont facultatifs. Un dialogue de base a:
Une configuration de dialogue commune est illustrée ci-dessous:
Vous pouvez également créer des commandes de dialogue personnalisées, dans lesquelles vous contrôlez la disposition dans la zone de dialogue. Vous pouvez créer des dialogues sophistiqués de cette manière, y compris ceux qui reçoivent les entrées de l'utilisateur à l'aide d'autres commandes Android telles que EditText, Spinner, etc..
Une configuration de dialogue personnalisée:
Parlons maintenant de la façon dont les dialogues sont gérés par votre classe d’activité. Nous allons commencer par les faits de base:
Alors, comment créez-vous un dialogue de base pour votre classe d'activité? Vous définissez simplement, créez et initialisez-le dans le cadre de votre activité. Regardons un exemple simple.
Commencez par créer une application Android simple avec un contrôle Button fonctionnel. Nous allons modifier cet exemple d'application afin qu'un clic de bouton déclenche l'affichage d'un dialogue très simple à l'écran. Vous pouvez soit créer cette application à partir de rien, soit suivre l'exemple de code source que nous vous fournissons..
Ajoutons maintenant trois nouveaux dialogues à votre classe d'activité de base.
Modifiez votre classe Java d'activité et ajoutez les variables de membre suivantes:
int statique final final MY_SUPER_SIMPLE_DIALOG_ID = 0; int statique final final MY_SIMPLE_DIALOG_ID = 1; int statique final final MY_DIALOG_ID = 2;
Cela définit trois identificateurs de dialogue uniques pour notre classe d’activité. Les valeurs sont arbitraires, mais doivent être uniques dans l'activité..
Pour créer des instances de dialogue, vous devez implémenter la méthode onCreateDialog () de votre classe d'activité. Lorsque la méthode showDialog () est appelée, elle déclenche un appel à cette méthode, qui doit renvoyer l'instance de dialogue appropriée. Étant donné que nous aurons trois dialogues différents dans notre classe, nous devrons vérifier l'identificateur de dialogue entrant et utiliser un commutateur pour renvoyer le dialogue du type approprié..
Le plus simple des contrôles de dialogue (MY_SUPER_SIMPLE_DIALOG_ID), comme illustré à la figure 4, affiche simplement un titre de texte. Il n'a pas de boutons. La seule façon de le rejeter est d'appuyer sur le bouton Retour. Vous ne voyez pas ce genre de dialogue très souvent, car la plupart ont au moins un bouton OK pour le fermer. Ce dialogue peut être créé en instanciant la classe Dialog et en définissant le titre du dialogue à l'aide de la méthode setTitle ()..
L'un des contrôles de dialogue les plus courants (MY_SIMPLE_DIALOG_ID), présenté ci-dessous, affiche un titre de texte avec une icône et un message. Il a un seul bouton - OK. Il s'agit d'un AlertDialog, qui peut être facilement créé à l'aide de la classe AlertDialog.Builder. Dans ce cas, vous utilisez les méthodes setTitle (), setMessage (), setIcon () et setPositiveButton () pour configurer le bouton comme vous le souhaitez..
Une autre commande de dialogue courante (MY_DIALOG_ID), illustrée à la figure suivante, affiche un titre de texte avec une icône et un message configurable. Il a deux boutons - OK et Annuler. Ceci est un autre AlertDialog, qui peut être créé à l'aide de la classe AlertDialog.Builder. Dans ce cas, vous utilisez les méthodes setTitle (), setMessage (), setIcon, setPositiveButton () et setNegativeButton () pour configurer le bouton comme vous le souhaitez..
L'implémentation complète de la méthode onCreateDialog (), qui montre la création des trois types de dialogue discutés ci-dessus, est illustrée ici:
@Override protected Dialog onCreateDialog (int id) switch (id) case MY_SUPER_SIMPLE_DIALOG_ID: Dialog superSimpleDlg = new Dialog (this); superSimpleDlg.setTitle (R.string.dialog_title); return superSimpleDlg; case MY_SIMPLE_DIALOG_ID: constructeur AlertDialog.Builder = new AlertDialog.Builder (this); builder.setTitle (R.string.dialog_title); builder.setMessage (R.string.dialog_message); builder.setIcon (android.R.drawable.btn_star); builder.setPositiveButton (android.R.string.ok, nouvelle DialogInterface.OnClickListener () public void onClick (boîte de dialogue DialogInterface, int) Toast.makeText (getApplicationContext (), "Cliquez sur OK!", Toast.LENGTH_SHORT). (); revenir; ); retour builder.create (); case MY_DIALOG_ID: AlertDialog.Builder builder2 = new AlertDialog.Builder (this); builder2.setTitle (R.string.dialog_title); builder2.setIcon (android.R.drawable.btn_star); builder2.setMessage (""); builder2.setPositiveButton (android.R.string.ok, nouvelle DialogInterface.OnClickListener () public void onClick (boîte de dialogue DialogInterface, int) Toast.makeText (getApplicationContext (), "Cliquez sur OK!", Toast.LENGTH_SHORT). (); revenir; ); builder2.setNegativeButton (android.R.string.cancel, new DialogInterface.OnClickListener () public void onClick (dialogue DialogInterface, int qui) Toast.makeText (getApplicationContext (), "Cliquez sur Annuler!", Toast.LENGTH_SHORT) .show (); revenir; ); retour builder2.create (); return null;
Rappelez-vous qu'une activité conserve les boîtes de dialogue et les réutilise chaque fois qu'elles sont affichées. Certaines boîtes de dialogue, comme nos deux premiers exemples (MY_SUPER_SIMPLE_DIALOG_ID et MY _SIMPLE_DIALOG_ID), ont un contenu statique. Par conséquent, leur affichage répétitif n’est pas un problème. Vous pouvez faire toute votre configuration de dialogue dans la méthode onCreateDialog () dans ce cas.
Cependant, notre troisième exemple de boîte de dialogue (MY_DIALOG_ID) contient un message configurable qui doit être mis à jour chaque fois que la boîte de dialogue s'affiche pour afficher la date et l'heure actuelles auxquelles la boîte de dialogue a été demandée. Si vous avez configuré le message pour cette boîte de dialogue dans la méthode onCreateDialog (), cette heure sera toujours affichée..
Chaque fois qu'un dialogue est demandé, vous avez la possibilité de mettre à jour son contenu à l'aide de la méthode onPrepareDialog (). Nous pouvons utiliser cette opportunité pour mettre à jour le message de notre dialogue avec de nouveaux contenus.
@Override protected void onPrepareDialog (id int, boîte de dialogue) super.onPrepareDialog (id, dialog); switch (id) case MY_SUPER_SIMPLE_DIALOG_ID: // contenu de la boîte de dialogue statique. Aucune initialisation nécessaire pause. case MY_SIMPLE_DIALOG_ID: // contenu statique de la boîte de dialogue. Aucune initialisation nécessaire pause. case MY_DIALOG_ID: // Une certaine initialisation est nécessaire. AlertDialog myDialog = (AlertDialog) dialogue; SimpleDateFormat dFormat = new SimpleDateFormat ("aaaa-MM-jj HH: mm: ss", Locale.getDefault ()); myDialog.setMessage ("Cette boîte de dialogue a été ouverte à" + dFormat.format (mCurrentTime)); Pause; revenir;
Notez que mCurrentTime est une variable membre que nous définissons chaque fois que le dialogue est déclenché. Voir le code source complet pour un exemple complet de la façon dont cela fonctionne.
Enfin, vous êtes prêt à déclencher l'affichage de vos commandes de dialogue selon vos besoins. Pour notre application de test très simple, nous utilisons une simple pression sur un bouton pour déclencher le lancement de l’un des trois dialogues que nous avons créés, en fonction de l’heure actuelle. Le gestionnaire de clic de notre contrôle Button, tel que défini dans la classe d'activité, se présente comme suit:
public void onDialogButtonClick (Afficher v) Date dt = new Date (); // Obtient la date et l'heure actuelles si (dt.getSeconds ()% 3 == 0) showDialog (MY_SUPER_SIMPLE_DIALOG_ID); else if (dt.getSeconds ()% 3 == 1) showDialog (MY_SIMPLE_DIALOG_ID); else mCurrentTime = dt; showDialog (MY_DIALOG_ID);
C'est tout ce dont vous avez besoin pour déclencher des dialogues dans votre classe d'activité. Cliquez plusieurs fois sur le bouton pour voir les différents types de contrôles de dialogue que vous avez définis..
Les boîtes de dialogue sont un outil d'interface utilisateur puissant qui peut vous aider à garder l'interface utilisateur de votre application flexible et dégagée. Vous pouvez personnaliser les commandes de la boîte de dialogue de différentes manières pour informer les utilisateurs, les inviter à les utiliser et collecter davantage d'entrées. Comprendre le cycle de vie des dialogues est important, car ils sont regroupés et réutilisés par leur activité parente.
Les développeurs mobiles Lauren Darcey et Shane Conder ont co-écrit plusieurs livres sur le développement Android: un livre de programmation en profondeur intitulé Développement d'applications sans fil Android, deuxième édition et Sams Teach Yourself Développement d'applications Android dans 24 heures, Deuxième édition. Lorsqu'ils n'écrivent pas, ils passent leur temps à développer des logiciels mobiles dans leur entreprise et à fournir des services de conseil. Vous pouvez les contacter par courrier électronique à l'adresse [email protected], via leur blog à l'adresse androidbook.blogspot.com et sur Twitter @androidwireless..
я я