2010-11-29 29 views
4

J'ai un bouton qui doit afficher une fenêtre contextuelle. Et la fenêtre contextuelle doit être alignée avec le côté droit du bouton. C'est comme ça que je le fais.Modifier la gravité de PopupWindow

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View view) { 
     if(popup == null) { 
      final View view = getLayoutInflater().inflate(R.layout.popup, null); 
      popup = new PopupWindow(view); 
     } 

     if(popup.isShowing()) { 
      popup.dismiss(); 
     } else { 
      popup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); 
      popup.setFocusable(true); 
      popup.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT); 
      popup.showAsDropDown(button, 0, 0); 
     } 
    } 
}); 

Ce code fonctionne correctement, mais la fenêtre contextuelle est alignée avec le côté gauche du bouton. Existe-t-il un moyen facile de changer la gravité de PopupWindow?

Répondre

11

La meilleure façon que je l'ai trouvé est de spécifier le paramètre x offset:

final View view = popup.getContentView(); 
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
popup.showAsDropDown(button, button.getWidth() - view.getMeasuredWidth(), 0); 
+0

J'aurais du mal à utiliser ça avec ListPopupWindow. – user1841702

-3

Vous pouvez essayer de le changer à partir du fichier xml:

android:layout_graviry="left" 
+0

popupWindow est créé comme un autre fenêtre, pas une vue, donc cette méthode ne fonctionne pas. – Michael