2011-08-04 14 views
9

ポップアップ画面を作成したアンドロイドアプリケーションを作成しました。しかし、私が戻るボタンを押しているとき、ポップアップは閉じていません。バックプレスでAndroidポップアップウィンドウを閉じる

私はonBackPressed()で試しました。それは動作していません。

誰かに何をすべきか教えてもらえますか?あなたがする必要がどのような

よろしく、

シャンカール

+1

と交換してください。 DialogまたはPopupWindowのインスタンスを参照しているかどうかはわかりません。 –

答えて

37

あなたはそれを初期化した後、あなたのPopupWindowにコールsetBackgroundDrawableです。ような何か:

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

これは動作することが確認されています。 – maebe

+2

1.ポップアップを表示する前に*を必ず呼び出してください。 2.パラメータを持たないコンストラクタは明らかに廃止されているので、そのコンストラクタにResourcesオブジェクトを渡したいことがあります。 3.詳細:http://stackoverflow.com/questions/3121232/android-popup-window-dismissal – SilithCrowe

+2

これは素晴らしい動作します。しかし、あなたが真になるように焦点を合わせるようにしてください。それが間違っているならば、戻るボタンはautomaticalltを働かないでしょう、あなたは呼び出し活動でhotveryspicyの解決策を実装する必要があります。 – 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"` 

私は最近、私はListPopupWindow(android.support.v7.internal.widget.ListPopupWindow)と協力し、私が呼ばれたときに戻るボタンが動作し始め

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

(私は新しいユーザーだ)、それが有用であると思います

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