2012-04-08 14 views
9

डिज़ाइन आवश्यकताएं, सूचीदृश्य की वस्तुओं में, एक बटन है, बटन दबाएं, और फिर, बटन के ऊपर एक पॉपअपविंडो दिखाने के लिए, नीचे नहीं।बटन के ऊपर हमेशा पॉपअपविंडो कैसे दिखाएं (देखें)?

एंड्रॉइड में, "showAsDropDown" का उपयोग करें, बटन के नीचे पॉपअपविंडो डिफ़ॉल्ट डिस्प्ले (देखें या एंकर)। लेकिन अगर नीचे दिखाने के लिए enougn नहीं है, तो Popupwindow बटन (देखें या एंकर) के शीर्ष पर दिखाएगा।

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

हां, तो मैं इस बात के अनुसार, बटन के आइटम "setSelectionFromTop" द्वारा स्थानांतरित करने के लिए, जाने के फैसले प्रभावशीलता को प्राप्त करने के लिए बटन के तल पर दिखाने के लिए कोई enougn है।

एंड्रॉयड में 4.0.3, ठीक है, आइटम चाल, popupwindow अभी भी जाने के बाद प्रेस कहाँ, नहीं स्थिति दिखाने जाता है, और popupwindow एंड्रॉयड 2.2 में नई स्थिति दिखाने के लिए और aboved, लेकिन, ।

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); 
} 

मेरी मदद कर सकता है, कैसे इसे हल करने की .. T_T

उत्तर

5

नहीं एक ही स्थिति में हो सकता है, लेकिन मेरे समाधान है:?!

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

हम सिर्फ लंगर ऊपर पॉपअप दिखा सकते हैं? यह एंकर के नीचे दिखा रहा है। –

संबंधित मुद्दे