2012-04-08 7 views
9

Tasarım gereksinimleri list liste görünümünde bir liste görünümüne sahiptir, bir düğmeniz vardır, düğmeyi basılı tutun ve ardından düğmenin üzerinde değil, aşağıdan bir düğmenin üzerinde bir popupwindow göstermek için.PopupWindow düğmesinin üstünde nasıl görünebilir (görünüm)?

Android'de, "showAsDropDown", düğmenin altındaki Popupwindow varsayılan ekranı (Görünüm veya bağlantı) kullanın. Ancak alt kısım gösterilmeyecekse, Popupwindow düğmenin üstünde görünecektir (Görünüm veya bağlantı).

onTop = (displayFrame.bottom - mScreenLocation[1] - anchor.getHeight() - yoff) <(mScreenLocation[1] - yoff - displayFrame.top); 

yüzden, ben bu noktaya göre, yargılama etkinliğini sağlamak için düğmeye altındaki göstermek için hiçbir enougn olduğunu let, "setSelectionFromTop" tarafından düğmeye öğeyi taşımak için. Android olarak

, popupwindow hala taşındıktan sonra nerede basın değil, pozisyon göstermek edilir 4.0.3, madde taşıma Tamam olduğunu ve popupwindow android 2.2, yeni konumu gösterip, aboved Ama.

boolean onTop = (displayFrame.bottom - mScreenLocation[1] - v.getHeight() - 0) < (mScreenLocation[1] - 0 - displayFrame.top); 
if(!onTop){ 
mListMain.setSelectionFromTop(mListMain.getPositionForView(v),(displayFrame.bottom - v.getHeight() + displayFrame.top)/2); 
} 

bana nasıl yardımcı olabilir bunu çözmek için ..

cevap

5

değil aynı durum olabilir, ama benim çözüm T_T:?!

public class BaloonView extends PopupWindow { 
    public BaloonView(Context context, View content) { 
     super(context); 
     setWidth(WindowManager.LayoutParams.WRAP_CONTENT); 
     setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 
     setTouchable(true); 
     setFocusable(true); 
     setOutsideTouchable(true); 
     setTouchInterceptor(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { 
        BaloonView.this.dismiss();     
        return true; 
       }    
       return false; 
       } 
      }); 
    } 

    public void showUnderView(View view, View content) { 
     setBackgroundDrawable(view.getContext().getResources().getDrawable(R.drawable.popup_inline_error_holo_dark)); 
     FrameLayout container = new FrameLayout(view.getContext()); 
     container.addView(content); 
     setContentView(container); 
     int[] location = new int[2]; 
     view.getLocationOnScreen(location); 
     container.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 
     int xoffset = view.getWidth()/2 - container.getMeasuredWidth()/2; 
     showAsDropDown(view, xoffset, 0); 
    } 
} 
+0

biz sadece çapa yukarıdaki pop-up gösterebilir? Bunu çapanın altında göster. –