2

重複の可能性:
ダイアログの外側をクリックしてダイアログを閉じる方法は?

ポップアップの外側をクリックして閉じるにはどうすればよいですか?

これが私のコードです:

cell.setOnClickListener(new OnClickListener(){

    /*This code is in a separate class so I needed to use ctx as context 
    *and the string "layout_inflater" because it was not recognizing 
    *LAYOUT_INFLATER_SERVICE*/

    @Override
    public void onClick(View arg0) {LayoutInflater layoutInflater  = 
    (LayoutInflater)ctx.getSystemService("layout_inflater");  
    View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
    final PopupWindow popupWindow = new PopupWindow(popupView, 
          LayoutParams.WRAP_CONTENT,  LayoutParams.WRAP_CONTENT);
    popupWindow.showAtLocation(newParentLayout, Gravity.CENTER, 0, 0); 
    }

私もこれをすべて追加しようとしましたが、結果はありません。

 popupWindow.setTouchable(true);
 popupWindow.setFocusable(true);
 popupWindow.setOutsideTouchable(true);
 Drawable bg = ctx.getResources().getDrawable(R.drawable.popup_bg);
 popupWindow.setBackgroundDrawable(bg);

私はアイデアがありません。何か助けはありますか?

追加する編集: メイン レイアウトは ViewPager/PagerAdapter であり、それが何かに影響する場合は?

4

2 に答える 2

10

背景とともに setOutsideTouchable(true) を設定してください。それは私にとってはうまくいきました。バックグラウンド ドローアブルを null に設定すると、OnTouchListener が強制終了されることはわかっています。

于 2012-09-23T18:19:33.163 に答える
0

この方法を試してください。

 cell.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            LayoutInflater layoutInflater  = 
                (LayoutInflater)ctx.getSystemService("layout_inflater");  
                View popupView = layoutInflater.inflate(R.layout.popup_window, null); 
                final PopupWindow popupWindow = new PopupWindow(ctx);

                popupWindow.setFocusable(true);
                popupWindow.setContentView(popupView);
                popupWindow.showAtLocation(b, Gravity.CENTER, 0, 0); 
                popupWindow.update(100, 100, 150, 150);
        }
    });
于 2012-09-23T18:52:08.750 に答える