2011-05-19 15 views
28

मैं अपने ऐप पर कुछ पॉपअप है, यह पूर्ण स्क्रीन है और निम्नलिखित कोड:एक PopupWindow केंद्रीकृत

content.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT)); 
    content.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    int screenWidth = windowManager.getDefaultDisplay().getWidth(); 
    int screenHeight = windowManager.getDefaultDisplay().getHeight(); 
    int x = screenWidth/2 - content.getMeasuredWidth()/2; 
    int y = screenHeight/2 - content.getMeasuredHeight()/2; 
    window.showAtLocation(content, Gravity.NO_GRAVITY, x, y); 

खिड़की शो केंद्रित करें।

लेकिन मेरे पास एक और गतिविधि है जो पूर्णस्क्रीन नहीं है, जब पॉपअप खुलता है जहां से इसकी आवश्यकता होती है।

यह पता लगाने की कोशिश कर रहा है कि ऐसा क्यों होता है, मुझे लगता है कि शोएटलोकेशन वर्तमान गतिविधि के सापेक्ष दिखाता है, लेकिन मुझे इसे प्रदर्शन के सापेक्ष दिखाना होगा।

मैं यह कैसे कर सकता हूं? या सिर्फ पॉपअप बस केंद्रित करने का एक आसान तरीका है?

उत्तर

84
popupWindow.showAtLocation(anyViewOnlyNeededForWindowToken, Gravity.CENTER, 0, 0); 

यह आपके विचार को केंद्रित करेगा।

यह मुझे समझने में 2 घंटे का दर्द ले गया। इसे संभालने के लिए मुझे किसी भी काले जादू गणित की आवश्यकता नहीं थी।

दृश्य खिड़की टोकन के लिए केवल आवश्यक है, इसका स्थान पर कोई अन्य प्रभाव नहीं है।

गुरुत्वाकर्षण लेआउट प्रबंधक को कहता है कि समन्वय प्रणाली शुरू करने के लिए और उन निर्देशांकों का इलाज कैसे करें। मुझे दस्तावेज़ नहीं मिल रहे हैं लेकिन हैकिंग मुझे दिखा रहा है कि:

  • केंद्र पॉप के बीच का उपयोग करता है ताकि एक्स, वाई निर्दिष्ट किया जा सके। तो 0,0 स्क्रीन केंद्रित
  • BOTTOM पॉप, x निर्दिष्ट करने के लिए पॉपअप के नीचे उपयोग करता है। तो 0,0 में पॉपअप तल स्क्रीन के नीचे गठबंधन है। यदि आप 10px पैडिंग चाहते हैं तो y = 10 (not -10) पॉपअप को स्क्रीन 10 पिक्सल तक ले जाने के लिए।

मैं इस यहाँ पर लिखा Android PopupWindow.showAtLocation() and effects of Gravity

+0

पूरी तरह से काम करता है। धन्यवाद –

+0

तो, अगर मैं नीचे फिट करना चाहता हूं, तो मैंने अभी इस लाइन 'mPw.showAtLocation (v, Gravity.BOTTOM, 0, 0) का उपयोग किया है; क्या यह xxhpi डिवाइस पर Nexus 7 की तरह ठीक है? मुझे इसके साथ समस्या थी ... –

+0

आप इस तारीख को बता सकते हैं कि यह पूर्व xxhpi डिवाइस पोस्ट किया गया था। आपका कोड आपको जो चाहिए वह करना चाहिए। लिखने के लिंक का पालन करें और विभिन्न विकल्पों के मेरे पोस्ट छवि उदाहरण देखें। – Bae

9
 View popupView = layoutInflater.inflate(R.layout.index_popviewxml, 
       null); 


     final PopupWindow popupWindow = new PopupWindow(popupView, 
       LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, true); 



     popupWindow.setTouchable(true); 
     popupWindow.setFocusable(true); 

     popupWindow.showAtLocation(popupView, Gravity.CENTER, 0, 0); 
+0

इस कॉल को एपीआई स्तर 19. की आवश्यकता है। वैसे भी मैं इस एपीआई स्तर को 1 9 वर्ष से कम कर सकता हूं? –

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