2012-06-15 11 views
12

मैं पॉपअपविंडो का उपयोग कर मेनू के साथ खेलता हूं, जो संपादन टेक्स्ट को ओवरलैप करता है।पॉपअपविंडो जेड

यह ठीक काम करता है, सिवाय इसके कि मेरे पॉपअपविंडो को एडिटटेक्स्ट आईएमई सिस्टम (चयन अंक, पेस्ट बटन) से कुछ आइटमों द्वारा ओवरलैप किया गया है।

मेरा सवाल है: मैं अपने पॉपअपविंडो के जेड ऑर्डरिंग को कैसे मजबूर करूं ताकि यह उन सजावट से ऊपर दिखाई दे?

यहां क्या हो रहा है इसकी छवि है। मुझे अपने पॉपअपविंडो (मेनू) को सबकुछ के शीर्ष पर खींचा जाना चाहिए, इस प्रकार विंडोमैनेजर को विंडोज़ ऑर्डर करने का तरीका बताएं। धन्यवाद।

enter image description here

+0

अच्छा प्रश्न है। दुर्भाग्य से मुझे लगता है कि जवाब यह होगा कि आप वास्तव में नहीं कर सकते हैं। अगर ऐसा करने का कोई तरीका है तो मुझे लगता है कि यह केवल स्टॉक एंड्रॉइड पर काम कर सकता है। टेक्स्ट चयनकर्ता और संदर्भ पॉप-अप कुछ चीजें हैं जो निर्माता आमतौर पर अपने हार्डवेयर पर अनुकूलित संस्करणों को पेश करते हैं। यहां तक ​​कि अगर ऐसा करने का कोई तरीका है, तो मुझे लगता है कि यह संपादन उपकरण में किए गए अनुकूलन के कारण सभी डिवाइस प्रकारों के लिए काम नहीं करेगा। – FoamyGuy

+0

अनुकूलन अप्रासंगिक हैं, तकनीकी रूप से उन चीज़ों को एंड्रॉइड स्तर पर किसी भी तरह खींचा जाना चाहिए, मुझे संदेह है कि वे एंड्रॉइड.व्यू की तरह हैं। विन्डो और एंड्रॉइड.व्यू.विंडो मैनेजर का उपयोग करें। –

उत्तर

7

अपने आप anwer मिले।

उन सजावट सामान्य पॉपअपविंडो-एस हैं, जो संपादन टेक्स्ट द्वारा प्रबंधित की जाती हैं।

किसी भी विंडो का जेड-ऑर्डरिंग WindowManager.LayoutParams.type द्वारा परिभाषित किया गया है, वास्तव में यह विंडो के उद्देश्य को परिभाषित करता है। एक पॉपअप विंडो के लिए वैध श्रेणियां FIRST_SUB_WINDOW - LAST_SUB_WINDOW हैं।

ऐप आम तौर पर जावा प्रतिबिंब का उपयोग करके छिपे हुए फ़ंक्शन PopupWindow.setWindowLayoutType (int) को कॉल करने और वांछित विंडो प्रकार सेट करने के अलावा PopupWindow का "प्रकार" नहीं बदल सकता है।

परिणाम:

enter image description here

संपादित करें: कोड है कि करता है:

Method[] methods = PopupWindow.class.getMethods(); 
    for(Method m: methods){ 
    if(m.getName().equals("setWindowLayoutType")) { 
     try{ 
      m.invoke(getPopupWindow(), WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     break; 
    } 
    } 
+0

क्या आप एक कोड स्निपेट प्रदान कर सकते हैं, आपने यह कैसे किया है? – halxinate

2
public void compatibleSetWindowLayoutType(int layoutType) { 
    if (Build.VERSION.SDK_INT >= 23) { 
     setWindowLayoutType(layoutType); 
    } else { 
     try { 
      Class c = this.getClass(); 
      Method m = c.getMethod("setWindowLayoutType", Integer.TYPE); 
      if(m != null) { 
       m.invoke(this, layoutType); 
      } 
     } catch (Exception e) { 
     } 
    } 
} 
0
import android.support.v4.widget.PopupWindowCompat; 

PopupWindowCompat.setWindowLayoutType(popupWindow, WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL);