2013-04-07 14 views
11

Popup Window ölçüleri alın, ama ihtiyacı düğmesiyle (Görünüm v) aşağıdaki ortalamak istiyorum:açmak için tıklanması gereken Zaten pop up pencere kurmak

public void showPopup(Context c, View v){ 
    int[] location = new int[2]; 
    v.getLocationOnScreen(location); 

    ViewGroup base = (ViewGroup) getView().findViewById(R.id.pup_pattern); 
    LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View pupLayout = inflater.inflate(R.layout.linearlayout_popup, base); 

    final PopupWindow pup = new PopupWindow(pupLayout, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 

    int x = location[0] - (int) ((pupLayout.getWidth() - v.getWidth())/2); // --> pupLayout.getWidth() gives back -2? 
    int y = location[1] + v.getHeight() + 10; 

    pup.setFocusable(true); 
    pup.showAtLocation(v, Gravity.NO_GRAVITY, x, y); 
} 

kimseyi Has tedbir almak için bir fikir?

cevap

21

Ekranda çizilmeyen görünümün yüksekliğini veya genişliğini alamazsınız.

pupLayout.getWidth() // bu Bunu

int width = MeasureSpec.makeMeasureSpec(0, MeasureSpec. UNSPECIFIED); 

gibi genişliği bu

View pupLayout = inflater.inflate(R.layout.linearlayout_popup, base); 
pupLayout.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

int x = location[0] - (int) ((pupLayout.getMeasuredWidth() - v.getWidth())/2); 
gibi kullanın almak gerekir size 0

verecek

İlgili konular