2013-03-05 7 views
0

J'utilise un PopupWindow pour afficher des données lorsqu'un utilisateur clique sur un bouton de la barre d'action (en utilisant ABS). J'utilise également une animation de traduction pour afficher et masquer le PopupWindow afin qu'il tombe du haut.Android PopupWindow fragment intérieur avec actionbarsherlock

Le comportement que je souhaite est que la barre d'action reste toujours sur (mettre au premier plan) tout le reste de l'activité. Mais quand je montre le PopupWindow l'animation le montre descendant et chevauchant la barre d'action pendant qu'elle voyage. Si je définis une hauteur différente pour le PopupWindow, elle chevauche également la barre d'action.

Existe-t-il un moyen d'utiliser ActionBarSherlock pour toujours afficher la barre d'action par-dessus tout, y compris les fenêtres contextuelles et les boîtes de dialogue? Ou est-il possible de joindre le PopupWindow au fragment sous-jacent à l'intérieur de la racine ? Jetez un coup d'œil à votre vue dans la visionneuse hiérarchique.

+0

Il s'agit d'une disposition personnalisée qui affiche un ListView avec des données et des images. – Wenger

Répondre

2

La hiérarchie ici, y compris où est ABS, agit comme l'index z pour les couches de vues et les groupes de vues. Vous pouvez saisir une couche qui est sous la barre d'action et ajouter une vue personnalisée à elle:

// Grab android.R.id.content's parent to encompass the actionbar & user content 
    content = ((ViewGroup) findViewById(android.R.id.content).getParent()); 

    // Make sure we inflate our menu resource before it is used 
    if (dialog == null) 
     dialog = (ViewGroup) <INFLATE SOME DIALOG/VIEWGROUP HERE>; 

    // We need this to add a view beneath the action bar 
    FrameLayout parent = (FrameLayout) content.getParent(); 
    // There needs to be some layout params set for visibility 
    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.TOP); 
    // A little tricky... using negative margins can do an initial translation that hides a view 
    layoutParams.setMargins(0, -(heightOfDialog), 0, 0); 
    dialog.setLayoutParams(layoutParams); 
    parent.addView(dialog, 0); 

Cela devrait vous permettre de positionner une vue sous la boîte de dialogue, et être encore capable d'animer la façon dont vous souhaitez l'aide une classe comme TranslateAnimation:

TranslateAnimation animation = new TranslateAnimation(leftOfContent, 0, 0, 0); 
animation.setDuration(TIME_TO_AUTO_SCROLL); 
dialog.startAnimation(animation); 
+0

Donc cette solution supprimerait le 'PopupWindow' et le remplacerait par une vue que vous pouvez mettre dans le FrameLayout? J'ai aimé la partie 'setAnimationStyle()' de la fenêtre PopupWindow alors je vais juste devoir comprendre comment animer la vue dans et hors. – Wenger

+0

J'ai ajouté un point de départ pour les animations. Ils sont assez lisses. – Shellum

+0

Super merci. Alors, comment chronométrer 'parent.addView (...)' et 'dialog.startAnimation (...)'? Si j'ajoute la vue, je pense qu'elle apparaît à son emplacement final, où je veux l'animer depuis le haut de l'écran. – Wenger

Questions connexes