最近在模仿微信的选择头像的功能,就是一个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);