2011-08-04 14 views
9

के साथ एंड्रॉइड पॉपअप विंडो बंद करें मैंने एक एंड्रॉइड एप्लिकेशन बनाया है जहां मैंने पॉपअप स्क्रीन बनाई है। लेकिन जब मैं बैक बटन दबा रहा हूं, तो पॉपअप बंद नहीं हो रहा है।बैक प्रेस

मैंने बैकप्रेस() पर प्रयास किया है। यह काम नहीं कर रहा है।

क्या कोई मुझे बता सकता है कि क्या करना है।

सादर,

शंकर

+1

यदि आप कोड प्रदान की यह मदद मिलेगी स्निपेट को आप ने लिखा के साथ अपने पॉपअप कोड बदलें। हम नहीं जानते कि क्या आप संवाद या पॉपअपविंडो के उदाहरण का जिक्र कर रहे हैं। –

उत्तर

37

आप क्या करने की जरूरत अपने PopupWindow पर कॉल setBackgroundDrawable आप इसे प्रारंभ के बाद है। कुछ की तरह:

myPopup.setBackgroundDrawable(new BitmapDrawable()); 
+0

यह काम करने की पुष्टि है। – maebe

+2

1. सुनिश्चित करें कि आप इसे * पहले * पॉपअप दिखाएं। 2. उस कन्स्ट्रक्टर में संसाधन ऑब्जेक्ट को पास करना चाहते हैं, क्योंकि बिना पैरामीटर वाले कन्स्ट्रक्टर को स्पष्ट रूप से बहिष्कृत किया गया है। 3. अधिक जानकारी: http://stackoverflow.com/questions/3121232/android-popup-window-dismissal – SilithCrowe

+2

यह बहुत अच्छा काम करता है। लेकिन सुनिश्चित करें कि आपके पास फोकस करने योग्य सेट सही है। यदि यह गलत है तो बैक बटन स्वचालित रूप से काम नहीं करेगा, आपको कॉलिंग गतिविधि में हॉटवेस्पीसी के समाधान को लागू करने की आवश्यकता होगी। – conor

2
//here "popUp" is ref of PopupWindow 

popUp.setBackgroundDrawable(new BitmapDrawable());// it is most important peace of code 

// For Key Listeners 

View v = popUp.getContentView(); 

//Here assigning the key Listners 

    v.setOnKeyListener(this); 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 

     if(keyCode == KeyEvent.KEYCODE_BACK) popUp.dismiss(); 

     return false; 

    }//Implements the KeyListener 
    //and be careful we should implement "OnKeyListener"` 

मुझे आशा है कि यह उपयोगी है (मैं नई उपयोगकर्ता हूँ)

4
LayoutInflater layoutInflater = (LayoutInflater)MainActivity.this.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    View popupView = layoutInflater.inflate(R.layout.popup_window_country_list, null); 
    countryPopup = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    countryPopup.setBackgroundDrawable (new BitmapDrawable()); 

    countryPopup.setFocusable(true); //Make Here True For back press dismiss 

    countryPopup.setOutsideTouchable(true); 

    countryPopup.setTouchInterceptor(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { 

       countryPopup.dismiss(); 


       return true; 

      } 

      return false; 

     } 
    }); 
4

हाल ही में मैं ListPopupWindow (android.support.v7.internal.widget.ListPopupWindow) के साथ काम किया और वापस बटन काम शुरू कर दिया जब मैं कहा जाता है

popupWindow.setModal(true); 

कोई फर्क नहीं पड़ता कि मैंने setBackgroundDrawable विधि में क्या सेट किया है, जैसा कि अन्य समाधान यहां मानते हैं।

2

निम्नलिखित कोड पूरी तरह से काम कर रहा है। तो

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Changes 'back' button action 
    if(keyCode==KeyEvent.KEYCODE_BACK) 
    { 
     if(!popUpHelper.isPopupShowing()){ 
      onBackPressed(); 
     }else{ 
      popUpHelper.dismiss(); 
     } 
    } 

    return super.onKeyDown(keyCode, event); 
} 


class PopupHelper { 
PopupWindow popupWindowAttachment; 
    public void initAndShow(Activity context,int mToolbarHeight){ 

    View layout = activity.getLayoutInflater().inflate(
      R.layout.activity_chat_attachment_popup, null); 
    //create and show and Make sure popup window focusable should be false 
    popupWindowAttachment = new PopupWindow(layout, 
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT); 
    popupWindowAttachment.showAsDropDown(layout, 0, mToolbarHeight 
      + (mToolbarHeight/2) - 5); 

    } 

    public void dismiss() { 
    if (isPopupShowing()) 
      popupWindowAttachment.dismiss(); 
    } 
    public boolean isPopupShowing() { 
    return popupWindowAttachment==null?false:popupWindowAttachment 
       .isShowing(); 
    } 
} 
0
popup.setBackgroundDrawable(new BitmapDrawable()); 

popup.setOnDismissListener(new PopupWindow.OnDismissListener() { 
      @Override 
      public void onDismiss() { 
       //do your code here 
      } 
     }); 
2

100% पॉपअप अपनी गतिविधि में निम्नलिखित समारोह को ओवरराइड वापस प्रेस पर खारिज करेगा। इस नीचे कोड

public void popup() { 

    View popUpView_pur = getActivity().getLayoutInflater().inflate(R.layout.popup, null); 
    PopupWindow popuplayout_pur = new PopupWindow(popUpView_pur, -1, -1, true); 
    popuplayout_pur.setBackgroundDrawable(new BitmapDrawable()); 
    popuplayout_pur.setOutsideTouchable(true); 
    popuplayout_pur.showAtLocation(popUpView_pur, 17, 0, 0); 

} 

(या)

public void popup() { 
    // TODO Auto-generated method stub 
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View popupView = inflater.inflate(R.layout.popuplayout, null, false); 

    PopupWindow pw = new PopupWindow(getActivity()); 
    pw.setWidth(WindowManager.LayoutParams.MATCH_PARENT); 
    pw.setHeight(WindowManager.LayoutParams.MATCH_PARENT); 

    pw.setTouchable(true); 
    pw.setFocusable(true); 
    pw.setOutsideTouchable(true); 
    pw.setContentView(popupView); 

    pw.showAtLocation(popupView, Gravity.CENTER, 0, 0); 
} 
संबंधित मुद्दे