popupwindow放置listview,并且使listview可以响应点击事件

最近在模仿微信的选择头像的功能,就是一个Popwindow里面是一个ListView,ListView是所有相册,用户点击里面的相册,那么那个相片展示的页面就会显示你选择的相册的相片

。刚开始发现里面的ListView不能获取点击事件,插入如下代码解决

popWinPlaylist.setFocusable(true);  
popWinPlaylist.update();  

随后发现popwindown以外的地方不能响应点击事件,其实你可以通过pw(PopupWindow对象).getContextView()拿到他的父视图。然后通过给父视图注册事件 让pw失去焦点 。

 //做一个不在焦点外的处理事件监听  
    parameterPop.getContentView().setOnTouchListener(new OnTouchListener(){  
     @Override  
     public boolean onTouch(View v, MotionEvent event) {  
      // TODO Auto-generated method stub  
      parameterPop.setFocusable(false);  
      parameterPop.dismiss();  
      return true;  
     }  
       
    });  
   }  

又发现一个问题,返回键不能响应点击事件,相信看了上面代码的应该会明白。要响应谁就交给谁。setFocusable(true)此时已经让Pw获取了焦点。解决办法:因为Pw里放置了ListView。可以利用setOnKeyListener对Pw里的ListView 设置监听代码如下:

parameter_list.setOnKeyListener(new OnKeyListener(){  
  
                @Override  
                public boolean onKey(View v, int keyCode, KeyEvent event) {  
                    // TODO Auto-generated method stub  
                    parameterPop.dismiss();  
                    return true;  
                }  
                  
            });  

还有一般我们弹出来PopWindow之后底下的界面是不会变的,我们可以用下面的方法来设置背景色

WindowManager.LayoutParams lp = getWindow().getAttributes();
		lp.alpha = 0.3f; //其实就是设置一下底下窗口的透明度,在dismiss之后设置回来就可以了
		getWindow().setAttributes(lp);



你可能感兴趣的:(android)