Je suis désireux de créer une aide superpositions comme ceux que vous voyez lorsque ICS charge pour la première fois ou dans des applications comme ES Explorateur de Fichiers ou de Apex Launcher (il y en a plus, mais je ne peux pas penser à eux en ce moment). Est-ce juste une relative mise en page avec une vue assis sur le dessus de l'autre? Je n'ai pas été capable de trouver un exemple de code pour faire une telle chose. Quelqu'un sait comment c'est fait ou qui ont des idées?
Réponses
Trop de publicités?Imaginons que vous le faites habituellement appel setContentView(R.layout.main)
, mais à la première exécution, vous voulez avoir cette superposition.
Étape #1: Créer un FrameLayout
dans du code Java et le passer à l' setContentView()
.
Étape #2: Utilisation d' LayoutInflater
pour gonfler R.layout.main
dans la FrameLayout
.
Étape #3: Utilisation de l' LayoutInflater
pour gonfler la superposition dans l' FrameLayout
.
Étape #4: Lorsque l'utilisateur appuie sur le bouton (ou autre) pour faire disparaître la superposition, appelez - removeView()
pour supprimer la superposition de l' FrameLayout
.
Depuis la superposition est un ultérieur de l'enfant de l' FrameLayout
, il va flotter par-dessus le contenu de R.layout.main
.
"L'entraîneur mark" est "Aide de superposition" dans les UX de parler :-)
coach_mark.xml est votre coach marque de mise en page
coach_mark_master_view est l'id de la partie supérieure la plus vue (racine) 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();
}
L'ajout de l'échantillon de coach_mark.xml (pour cette excellente solution donnée par Oded Breiner), de sorte que son facile pour ppl pour copier & coller à voir exemple de travail rapidement.
Échantillon de coach_mark.xml ici, le changement de l' -> drawable/acheter <- à votre image:
coach_mark.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/coach_mark_master_view">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:src="@drawable/buy" />
</RelativeLayout>
</LinearLayout>
Vous pouvez le faire assez rapidement. Vous ajoutez, par exemple un LinearLayout où vous mettre une photo avec alpha qui correspondent à vos informations d'aide et de quoi voulez-vous dessiner comme une superposition. En vous xml de votre activité, vous mettez cette page dans un RelativeLayout après la mise en page de votre activité avec le Parti de la visibilité. Si vous souhaitez dessiner les informations d'aide, vous venez de neeed pour définir cette visibilité visible.
J'espère que je suis clair, si vous avez la moindre question,je suis un plaisir d'y répondre.
Voir mon autre réponse comment par programme montrent une superposition de mise en page sur le haut de l'activité en cours. L'activité de l'layout.xml n'a pas besoin de savoir quelque chose au sujet de la superposition de la peau. Vous pouvez mettre de superposition semi-transparente, ne couvrent qu'une partie de l'écran, un ou plusieurs textview et de boutons sur elle... Comment recouvrir un bouton programmically?
- créer res/layout/paused.xml RelativeLayout modèle ou utiliser n'importe quel modèle de niveau supérieur
- créer une fonction pour afficher l'incrustation de la peau
- la clé est d'obtenir le handle de layout.xml, utilisez LayoutInflater classe pour analyser xml pour objet de vue, ajouter la superposition de vue actuel de la structure de mise
- Mon exemple utilise une minuterie pour détruire la superposition de l'objet par le retrait de la vue structure. C'est probablement ce que vous voulez aussi bien pour se débarrasser de lui sans laisser de trace.
Mon but était que les activités principales ne sont pas conscients de toute la superposition de la peau, des superpositions d'aller et venir, de nombreuses superpositions, encore capable d'utiliser overlay1.xml les fichiers texte comme un modèle, et le contenu doit être mis à jour par programme. Je fais à peu près ce que CommonsWare nous a dit à mon post montre le code de programme pour commencer.
avertissement: OPs "Merci pour vos commentaires. C'est la façon dont je l'imaginais qu'il fait. Je dois donner crédit à la réponse ci-dessous" commentaire ne signifie pas ma réponse mais CommonsWare réponse. Stackoverflow ont changé de poste rangements.