2011-09-01 8 views
6

एंड्रॉइड पर पॉपअपविंडो कैसे खोलें और पॉपअपविंडो को खारिज किए बिना अन्य सभी घटकों को स्पर्श करने दें?एक पॉपअपविंडो खोलें और बाहरी लोगों को अभी भी स्पर्श करने दें

यह है कि यह कैसे बनाया है:

public class DynamicPopup { 
    private final PopupWindow window; 
    private final RectF rect; 
    private final View parent; 
    private final RichPageView view; 

    public DynamicPopup(Context context, RichPage page, RectF rectF, View parent) { 
     this.parent = parent; 
     rect = rectF; 

     window = new PopupWindow(context); 

     window.setBackgroundDrawable(new BitmapDrawable()); 
     window.setWidth((int) rect.width()); 
     window.setHeight((int) rect.height()); 
     window.setTouchable(true); 
     window.setFocusable(true); 
     window.setOutsideTouchable(true); 

     view = new RichPageView(context, page, false); 
     window.setContentView(view); 

     view.setOnCloseListener(new Listener(){ 
      @Override 
      public void onAction() { 
       window.dismiss(); 
      } 
     }); 


    } 

    public void show() { 
     window.showAtLocation(parent, Gravity.NO_GRAVITY, (int) rect.left, (int) rect.top); 
    } 
} 
+2

क्या आपने इस विधि को आजमाया है? http://developer.android।कॉम/संदर्भ/एंड्रॉइड/विजेट/पॉपअपविंडो.html # सेटऑटसाइड टच करने योग्य% 28boolean% 29 – ernazm

+0

@ernazm, आपको इसे एक उत्तर में ले जाना चाहिए। – Phil

+0

अच्छी तरह से मुझे यकीन नहीं है कि यह विधि इरादे से काम करती है क्योंकि मैंने इसका उपयोग नहीं किया है (एंड्रॉइड एसडीके में बहुत सारी छोटी सी चीजें हैं) और यह सवाल उठाया गया है। – ernazm

उत्तर

8

के अनुसार javadocs

नियंत्रित करती है कि पॉप-अप अपनी खिड़की के बाहर स्पर्श घटनाओं के बारे में सूचित कर दिया जाएगा। यह केवल पॉप-अप स्पर्श लेकिन फ़ोकस करने योग्य नहीं

तो अपने लाइन

window.setFocusable(true); 

विधि setOutsideTouchable() का कारण बनता है कुछ भी नहीं कर रहे हैं के लिए समझ में आता है।

+0

window.set फोकस करने योग्य (झूठा) के साथ भी; यह डिफ़ॉल्ट –

1

कि के लिए आपके पास कस्टम पॉपअप विंडो बना दिया। उसमें आपको एक और लेआउट कॉल करना होगा। तो इस तरह आप अन्य घटक भी एक्सेस कर सकते हैं। यह सिर्फ एक प्रकार का लेआउट है। लेकिन आप पॉपअप विंडो के रूप में अपनी उपस्थिति सेट कर सकते हैं।

<!-- POPUP MENU --> 
    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/popup_window" 
     android:orientation="vertical" 
     android:gravity="center" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="@drawable/fullwindowborderforpopup" 
     > 



     <LinearLayout 

      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 

      android:padding="1px" 
      android:layout_marginTop="15dip" 
      android:layout_marginLeft="20dip" 
      android:layout_marginRight="20dip" 
      android:layout_marginBottom="10dip" 
      android:background="@drawable/borderforpopup" 
      > 
      <LinearLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:layout_marginTop="5dip" 
       android:layout_marginLeft="3dip" 
       android:layout_marginRight="3dip" 
       android:layout_marginBottom="3dip"> 

       <TextView 
        android:id="@+id/tital_of_popup" 
        android:gravity="center_vertical|center_horizontal" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="Event Registration" 
        android:textStyle="bold" 
        android:textColor="#ffffff" 
        /> 
      </LinearLayout> 

      <LinearLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_horizontal" 
       android:layout_marginTop="5dip" 
       android:layout_marginLeft="3dip" 
       android:layout_marginRight="3dip" 
       android:layout_marginBottom="3dip" 
      > 

       <TextView 
        android:id="@+id/message_of_popup" 
        android:gravity="center_vertical|center_horizontal" 
        android:layout_height="wrap_content" 
        android:text="Please fill all the data" 
        android:layout_width="wrap_content" 
        android:textStyle="normal" 
        android:textColor="#ffffff" /> 
     </LinearLayout> 
     <LinearLayout 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_horizontal" 
      android:layout_marginTop="5dip" 
      android:layout_marginLeft="6dip" 
      android:layout_marginRight="6dip" 
      android:layout_marginBottom="9dip" 
       > 


      <Button 
       android:layout_height="fill_parent" 
       android:id="@+id/okbutton" 
       android:text="OK" 
       android:textColor="#ffffff" 
       android:shadowColor="#000000" 
       android:gravity="center" 
       android:layout_width="fill_parent" 
       android:background="@drawable/buttonborderframe"/> 
     </LinearLayout> 
    </LinearLayout> 
</RelativeLayout> 

इसे आजमाएं। और जब भी आप चाहें लेआउट छुपा सकते हैं और दिखा सकते हैं। और अन्य फ़ील्ड पहुंच योग्य हैं।

+0

मुझे वास्तव में रनटाइम पर पॉपअपविंडोज़ जोड़ने की ज़रूरत है, मेरे पास तब तक नहीं है जब तक यह चल रहा न हो। –

+1

फिर आपको पॉपअप विंडो के लिए कस्टम शैली को लागू करना होगा और अपनी इच्छित संपत्ति को सेट करना होगा। –

12

सिर्फ ernazm तरह

कहना javadocs

नियंत्रित करती है कि पॉप-अप अपनी खिड़की के बाहर स्पर्श घटनाओं के बारे में सूचित किया जाएगा के अनुसार। यह केवल पॉप-अप हैं कि स्पर्श लेकिन फ़ोकस करने योग्य नहीं

और यह

window.setTouchable(true); 
window.setFocusable(false); 
window.setOutsideTouchable(false); 

पर काम जब खिड़की touchalbe सच है, फ़ोकस करने योग्य गलत है है, setOutsideTouchable() काम है, अगर के लिए समझ में आता है setOutsideTouchable (true), पॉपअपविंडो के बाहर स्पर्श करें खारिज कर देगा, अन्यथा पॉपअपविंडोज़ के बाहर भी खारिज किए बिना स्पर्श किया जा सकता है।

+1

'सेट टच करने योग्य() 'डिफ़ॉल्ट रूप से बंद हो जाता है' सत्य '। और 'setOutsideTouchable() 'डिफ़ॉल्ट रूप से' गलत 'है। तो आपको बस सेट करने की ज़रूरत है 'सेट फोकसबल (झूठी)'। लेकिन ऐसा लगता है कि ईवेंट श्रोताओं पॉपअप के अंदर विचारों पर काम नहीं करते हैं जब यह ध्यान केंद्रित नहीं करता है। –

+0

यह थोड़ा मुश्किल है। दस्तावेज़ सही हैं लेकिन किसी कारण से, मैं हमेशा सत्य पर ध्यान केंद्रित करना चाहता हूं। उपरोक्त तीन सेटिंग काम करते हैं। –

+0

स्पिनरों के लिए मेरा इवेंट श्रोता काम करता है लेकिन मेरा एडिटेक्स्ट श्रोता नहीं करता है। –

0

अपने कोड को यह जोड़ने का प्रयास करें:

window.setOutsideTouchable(true); 

Android documentation से:

void setOutsideTouchable (boolean touchable) 

नियंत्रित करती है कि पॉप-अप अपनी खिड़की के बाहर स्पर्श घटनाओं के बारे में सूचित कर दिया जाएगा। यह केवल पॉप-अप के लिए समझ में आता है जो टच करने योग्य नहीं है लेकिन फोकस करने योग्य नहीं है, जिसका मतलब है कि विंडो के बाहर छूने के पीछे खिड़की पर पहुंचा दिया जाएगा। डिफ़ॉल्ट false है।

यदि पॉपअप दिखा रहा है, तो इस विधि को कॉल करने पर अगली बार पॉपअप दिखाया जाएगा या मैन्युअल कॉल के माध्यम से update() विधियों में से एक को प्रभावी होगा।