Comment créer une superposition d’aide comme vous pouvez le voir dans quelques applications Android et ICS?

Je veux créer des superpositions d’aide comme celles que vous voyez quand ICS se charge pour la première fois ou dans des applications comme ES File Explorer ou Apex Launcher (il y en a plus, mais je ne peux pas les voir pour le moment). Est-ce juste une disposition relative avec une vue par-dessus l’autre? Je n’ai pas été en mesure de trouver un exemple de code pour faire une telle chose. Quelqu’un sait-il comment cela se fait ou a-t-il des idées?

Explorateur de fichiers ESExplorateur de fichiers ES

Supposons que vous appelez ordinairement setContentView(R.layout.main) , mais que lors de la première exécution, vous souhaitez avoir cette superposition.

Étape # 1: Créez un FrameLayout en code Java et transmettez-le à setContentView() .

Étape # 2: Utilisez LayoutInflater pour gonfler R.layout.main dans FrameLayout .

Étape 3: Utilisez LayoutInflater pour gonfler la superposition dans FrameLayout .

Étape 4: Lorsque l’utilisateur appuie sur le bouton (ou autre removeView() pour supprimer la superposition, appelez removeView() pour supprimer la superposition de FrameLayout .

Étant donné que la superposition est un enfant ultérieur de FrameLayout , elle apparaîtra au-dessus du contenu de R.layout.main .

“Coach mark” est “Help overlay” dans UX talk 🙂

coach_mark.xml est votre mise en page de marque d’entraîneur

coach_mark_master_view est l’id de la vue la plus haute (root) dans coach_mark.xml

 public void onCoachMark(){ final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); dialog.setContentView(R.layout.coach_mark); dialog.setCanceledOnTouchOutside(true); //for dismissing anywhere you touch View masterView = dialog.findViewById(R.id.coach_mark_master_view); masterView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); } 

Ajouter un exemple de coach_mark.xml (à cette excellente solution donnée par Oded Breiner), il est donc facile pour ppl de copier-coller pour voir un exemple de travail rapidement.

Exemple de coach_mark.xml ici, changez le -> drawable / coach_marks à votre image:

coach_mark.xml

       

Et éventuellement, utilisez ce thème pour supprimer le remplissage:

  

Vous pouvez le faire assez rapidement. Vous ajoutez, par exemple, un LinearLayout où vous placez une image avec alpha qui correspond à vos informations d’aide et que voulez-vous dessiner comme une superposition. Dans votre fichier xml de votre activité, vous mettez cette disposition dans un RelativeLayout après la mise en page de votre activité avec la visibilité Gone. Lorsque vous souhaitez dessiner les informations d’aide, il vous suffit de définir cette visibilité pour qu’elle soit visible.

J’espère que je suis clair, si vous avez des questions, je serai ravi d’y répondre.

Voir mon autre réponse comment montrer par programmation une disposition de superposition par-dessus l’activité en cours. Le fichier layout.xml de l’activité n’a pas besoin de connaître la couche de recouvrement. Vous pouvez mettre la superposition semi-transparente, ne couvrir qu’une partie de l’écran, une ou plusieurs textview et des boutons … Comment superposer un bouton par programmation?

  • créer le gabarit RelativeLayout res / layout / paused.xml ou utiliser n’importe quel niveau de mise en page
  • créer une fonction pour afficher la peau de superposition
  • la clé est d’obtenir un handle vers layout.xml, utiliser la classe LayoutInflater pour parsingr xml pour afficher l’object, append une vue superposée à la structure actuelle
  • Mon exemple utilise un minuteur pour détruire l’object superposé en le supprimant complètement de la structure de la vue. C’est probablement ce que vous voulez aussi vous en débarrasser sans laisser de trace.

Mon objective était que les activités principales ne connaissent aucune couche de recouvrement, les incrustations vont et viennent, de nombreuses superpositions différentes, toujours capables d’utiliser des fichiers texte overlay1.xml comme modèle, et le contenu devrait être mis à jour par programme. Je fais à peu près ce que CommonsWare nous a dit que mon message montre le code de programme réel pour commencer.

Disclaimer: OPs “Merci pour votre consortingbution. Voici comment je l’ai imaginé. Je dois donner crédit à la réponse ci-dessous” Le commentaire ne signifie pas ma réponse mais CommonsWare répond. Stackoverflow a changé les commandes postérieures.