android 怎么实现点击屏幕其他地方popupwindow消失

2025-05-09 11:06:48
推荐回答(2个)
回答1:

只需要设置proupwindows的setOutsideTouchable属性即可。

以下为示例代码:

private void showPopupWindow(View parent) {  
        if (popupWindow == null) {  
            LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
            view = layoutInflater.inflate(R.layout.group_list, null);  
            lv_group = (ListView) view.findViewById(R.id.lvGroup);  
              
            Collections.reverse(groups);  
            GroupAdapter groupAdapter = new GroupAdapter(this, groups);  
            lv_group.setAdapter(groupAdapter);  
            popupWindow = new PopupWindow(view, 200, 220);  
        }  
        popupWindow.setFocusable(true);  
        popupWindow.setOutsideTouchable(true);  //设置点击屏幕其它地方弹出框消失      
        popupWindow.setBackgroundDrawable(new BitmapDrawable());  
        WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);  
        int xPos = -popupWindow.getWidth() / 2  
                + getCustomTitle().getCenter().getWidth() / 2;  
  
        popupWindow.showAsDropDown(parent, xPos, 4);  
  
        lv_group.setOnItemClickListener(new OnItemClickListener() {  
            @Override  
            public void onItemClick(AdapterView adapterView, View view,  
                    int position, long id) {  
                loadNew(((StringItem)(groups.get(position))).getId());  
                if (popupWindow != null)   
                    popupWindow.dismiss();  
            }  
        });  
    }

回答2:

mWindow = new PopupWindow(context);

mWindow.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
mWindow.dismiss();

return true;
}

return false;
}
});